Codeforces Round #615 (Div. 3) A-F

传送门

这场比较简单,简单的题就不说题意了。

A.

问加nnn个数,能否使a,b,ca,b,ca,b,c相等。

直接先加到相等再看看模333是否为000即可。

//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].l+tr[u].r>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=1000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int a[10];int main()
{
//	ios::sync_with_stdio(false);
//	cin.tie(0);int _; scanf("%d",&_);while(_--){int n;scanf("%d%d%d%d",&a[1],&a[2],&a[3],&n);sort(a+1,a+1+3);n-=a[3]-a[1];n-=a[3]-a[2];if(n<0||n%3!=0) puts("NO");else puts("YES");}return 0;
}
/**/

B.

只能往右或者上走,求字典序最小的走法。

排序后判一下是否有不合法的点,让后每次都先右后上就行。

//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].l+tr[u].r>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=100010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n;
PII p[N];bool check()
{for(int i=2;i<=n;i++) if(p[i].X<p[i-1].X||p[i].Y<p[i-1].Y) return false;return true;
}int main()
{
//	ios::sync_with_stdio(false);
//	cin.tie(0);int _; scanf("%d",&_);while(_--){scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d%d",&p[i].X,&p[i].Y);sort(p+1,p+1+n);if(check()){puts("YES");int sx=0,sy=0,st=1;while(st<=n){for(int i=sx;i<p[st].X;i++) printf("R");for(int i=sy;i<p[st].Y;i++) printf("U");sx=p[st].X; sy=p[st].Y;st++;}puts("");}else puts("NO");}return 0;
}
/**/

C.

找三个数a,b,ca,b,ca,b,c,且其都大于等于222,且a!=b,b!=c,a!=ca!=b,b!=c,a!=ca!=b,b!=c,a!=c,且a∗b∗c=na*b*c=nabc=n

直接把nnn质因子分解,让后按照质因子的幂次从1,2,3...1,2,3...1,2,3...累乘起来,取两个数,第三个数直接算即可。

//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].l+tr[u].r>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=100010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n;
map<int,int>mp;void divide()
{for(int i=2;i<=n/i;i++)if(n%i==0){while(n%i==0) mp[i]++,n/=i;}if(n>1) mp[n]++;
}int main()
{
//	ios::sync_with_stdio(false);
//	cin.tie(0);int _; scanf("%d",&_);while(_--){scanf("%d",&n);int nn=n;mp.clear();divide();int a,b,c;a=-1; b=-1; c=-1;vector<int>v;for(auto x:mp){int now=x.X,cnt=1;while(cnt<=x.Y){v.pb(now);now*=x.X;x.Y-=cnt;cnt++;}}if(v.size()<2) puts("NO");else{a=v[0],b=v[1],c=nn/a/b;if(c==1||c==a||c==b) { puts("NO"); continue; }puts("YES");printf("%d %d %d\n",a,b,c);}}return 0;
}
/**/

D.

序列初始为空,每次加入一个数yyy,可以将这个数+x,−x+x,-x+x,x,可以执行无限次,但是yyy不能小于000。求每次加入数后的最大mexmexmex

因为求最大的mexmexmex,所以肯定是将这个数从小往大的填。我们将ymodxy\bmod xymodx,这个时候可以将其看成一个系,即ymodx+k∗xy\bmod x +k*xymodx+kx,我们从这个系的底开始向上填即可。由于ymodx<xy\bmod x<xymodx<x只需要开一个数组记录一下当前底是多少,每次如果用掉了就让这个底+x+x+x即可。
但是注意不能一直加,这样的话会rerere,所以我们设置一个上限就好啦,因为mexmexmex不会一直大下去的。

//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].l+tr[u].r>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=10000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int q,x;
int pos[N],st[N];
int ans=0;int main()
{
//	ios::sync_with_stdio(false);
//	cin.tie(0);scanf("%d%d",&q,&x);for(int i=0;i<=x;i++) pos[i]=i;while(q--){int v; scanf("%d",&v);v%=x; if(pos[v]<8000000) pos[v]+=x;  v=pos[v]-x;st[v]=1;while(st[ans]) ans++;printf("%d\n",ans);}return 0;
}
/**/

E.

给你个矩阵,每次可以修改一个数为1,n∗m1,n*m1,nm之间的任何数,也可以将一列向上循环移动一位,这两个花费都是111,求变成如下矩阵的最小花费。
在这里插入图片描述

乍一看不是很好做,但是仔细一想就是个大水题。
因为移动只涉及列,所以每一列是独立的,我们独立统计每一列就好啦。
只考虑一列,我们可以记录一下这一列的每个数,这个数到他应该到的位置需要移动几次,假设移动xxx次,让后我们让cnt[x]++cnt[x]++cnt[x]++,之后就枚举移动几次,假设移动iii次,让后答案就是n−cnt[x]+in-cnt[x]+incnt[x]+i

//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#define X first
#include<assert.h>
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].l+tr[u].r>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=2000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n,m;
int a[N];
vector<int>v[N];int solve(int j)
{for(int i=0;i<=n;i++) a[i]=0;for(int i=0;i<n;i++){if(v[i][j]%m!=j||v[i][j]>=n*m) continue;int pos=v[i][j]/m;int cnt=0;if(pos>i) cnt=i+n-pos;else cnt=i-pos;a[cnt]++;}int ans=INF;for(int i=0;i<=n;i++) ans=min(ans,i+n-a[i]);return ans;
}int main()
{
//	ios::sync_with_stdio(false);
//	cin.tie(0);scanf("%d%d",&n,&m);for(int i=0;i<n;i++)for(int j=0;j<m;j++){int x; scanf("%d",&x); x--;v[i].pb(x);}int ans=0;for(int i=0;i<m;i++) ans+=solve(i);printf("%d\n",ans);return 0;
}
/**/

F.

求三个点,这三个点之间的边最多。

众所周知,cfcfcf就是猜结论的比赛。所以直接选两个点为直径的两端,之后选的一个点就是到直径边最多的点即可。
实现的话我以前写过求直径上所有点的,所以直接贴过来了,知道所有点了之后,放进队列,bfsbfsbfsdisdisdis,选个disdisdis最大的即可。

//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].l+tr[u].r>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=1000010,M=N*2,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n,root;
map<PII,int>mp;
vector<int>v[N];
int ans[N],d[N],dis[N];
int e[M],ne[M],h[N],w[M],idx;
int depth[N],res;
bool st[N];
int ed,flag,pre[N];void add(int a,int b,int c)
{e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++;
}void dfs_dep(int u,int fa)
{depth[u]=depth[fa]+1;for(auto x:v[u]){int ver=x;if(ver==fa) continue;dfs_dep(ver,u);}
}void dfs(int u,int fa)
{if(flag) return;if(u==ed) { flag=1; return; }for(auto x:v[u]){if(x==fa) continue;pre[x]=u;dfs(x,u);if(flag) return;pre[x]=0;}
}void dfs_add(int u,int fa)
{for(auto x:v[u]){if(x==fa) continue;ans[x]=mp[{x,u}];dfs_add(x,u);}
}void dfs_d(int u,int fa)
{int mx=0;for(auto x:v[u]){if(x==fa) continue;dfs_d(x,u);mx=max(mx,depth[x]+1);}depth[u]=mx;
}int main()
{
//	ios::sync_with_stdio(false);
//	cin.tie(0);memset(h,-1,sizeof(h));scanf("%d",&n);for(int i=1;i<=n-1;i++){int a,b; scanf("%d%d",&a,&b);v[a].pb(b),v[b].pb(a);}dfs_dep(1,0);int id=0,mx=-1;for(int i=1;i<=n;i++) if(depth[i]>mx) mx=depth[i],root=i;memset(depth,0,sizeof(depth));dfs_dep(root,0); mx=-1;for(int i=1;i<=n;i++) if(depth[i]>mx) mx=depth[i],ed=i;dfs(root,0);vector<int>vv; vv.pb(ed);pre[root]=0;while(pre[ed]!=0) vv.pb(pre[ed]),ed=pre[ed];queue<int>q;memset(dis,0x3f,sizeof(dis));memset(st,false,sizeof(st));for(int i=0;i<vv.size();i++) { int x=vv[i]; q.push(x),st[x]=1,dis[x]=0; }while(q.size()){int t=q.front(); q.pop();for(int i=0;i<v[t].size();i++){int x=v[t][i];if(st[x]) continue;dis[x]=dis[t]+1;st[x]=1;q.push(x);}}int x=vv[0],y=vv[vv.size()-1],z=vv[1];int mmx=0;for(int i=1;i<=n;i++) if(dis[i]>mmx&&dis[i]!=INF) mmx=dis[i],z=i;printf("%d\n",mmx+(int)vv.size()-1);printf("%d %d %d\n",x,y,z);return 0;
}
/*
12
1 2
2 12
2 3
12 7
12 6
12 5
3 4
1 11
11 8
11 9
11 10
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315332.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Elasticsearch 构建 .NET 企业级搜索

最近几年出现的云计算为组织和用户带来了福音。组织对客户的了解达到前所未有的透彻&#xff0c;并能够采用个性化通信锁定客户。用户几乎可以随时随地获取其数据&#xff0c;使其更加易于访问和使用。为了存储所有这些数据&#xff0c;大型数据中心遍布全世界。但是&#xff0…

牛客练习赛73 D 离别(线段树+右端点排序离线查询)

牛客练习赛73 D 离别 思路: 对于每一个固定的右端点i&#xff0c;我们都找到一个区间&#xff08;l,r&#xff09;使得区间中的点为左端点时 里面最大的的种数为k。 这个可以用队列或者vector来维护。 然后我们对于q个查询&#xff0c;安装r从小到大排序。 开始遍历&#xff0…

书籍推荐:《More Effective C#》

很多年前看过Bill Wagner的《Effective C#》第一版&#xff0c;涵盖了C#2.0相关语言特性的最佳实践&#xff0c;教我们怎样更优雅地去编写C#代码&#xff0c;当时觉得受益匪浅。最近拿到了《More Effective C#》第二版&#xff0c;目前看了大概三分之二&#xff0c;让我对C#的的…

Codeforces Round #717 (Div. 2) D(倍增dp)

Codeforces Round #717 (Div. 2) D 题意:n个数 q个询问&#xff0c;每一个询问有l和r&#xff0c;问你l到r这段区间中最少能分成几段&#xff0c;每一段中的数都是互质的。 思路&#xff1a;首先预处理出每一个点向左走最多能走多远&#xff0c;可以分解质因数来找&#xff0c…

Codeforces Round #716 (Div. 2) D(随机算法)

Codeforces Round #716 (Div. 2) D 题意:区间查询&#xff0c;问区间最少能分成几部分使得最多的数不超过总数的一半 向上取整。 思路:找到区间的总数s&#xff0c;如果不超过一半的话就是一部分。超过一半的话&#xff0c;那我们只要考虑超过一半的那一个数怎么组合&#xff…

牛客挑战赛30 C 小G砍树 换根dp+组合

链接&#xff1a;https://ac.nowcoder.com/acm/contest/18072/E 题目&#xff1a;给你一棵n个节点的带标号无根树。每次&#xff0c;你可以选择一个度数为1的节点并将它从树上移除。问总共有多少种不同的方式能将这棵树删到只剩 1 个点。两种方式不同当且仅当至少有一步被删除的…

换根dp求树所有节点的最小深度

链接&#xff1a;https://ac.nowcoder.com/acm/contest/18072/A 牛妹有一张连通图&#xff0c;由n个点和n-1条边构成&#xff0c;也就是说这是一棵树&#xff0c;牛妹可以任意选择一个点为根&#xff0c;根的深度为0&#xff0c;对于任意一个非根的点&#xff0c;我们将他到根节…

译 | 介绍全新 Microsoft.Data.SqlClient

原文&#xff1a;Diego翻译&#xff1a;Edi Wang本文由 SqlClient 和 SQL 服务器工具上的项目经理 Vicky Harp 撰写。那些一直密切关注 .NET 开发的人很可能看到 Scott Hunter 的最新博客文章&#xff0c;即《.NET Core 是 .NET 的未来》。.NET Framework 将重点转向稳定性&…

Linux下Jenkins与GitHub自动构建NetCore与部署

今天我们来谈谈NetCore在Linux底下的持续集成与部署。NetCore我就不多介绍了&#xff0c;持续集成用的是Jenkins&#xff0c;源代码管理器用的是GitHub。我们就跟着博文往下走吧。1.Linux环境在进行自动构建之前&#xff0c;我们需要一个可以运行的Linux环境&#xff0c;并保证…

容器化之后如何节省云端成本?(二十七)

如何节约云端成本&#xff1f;上云在大部分情况下就是为了降低成本&#xff0c;在这方面&#xff0c;主流的容器服务基本上都能够有效地降低成本——不仅能够高效自动化的管理和控制容器&#xff0c;极大地降低了DevOps的维护成本&#xff0c;而且不需支付Kubernetes Master节点…

2020牛客多校第1场I-1 or 2一般图最大匹配带花树

链接&#xff1a;https://ac.nowcoder.com/acm/contest/5666/I Bobo has a graph with n vertices and m edges where the i-th edge is between the vertices ai​ and bi​. Find out whether is possible for him to choose some of the edges such that the i-th vertex is…

Codeforces Round #609 (Div. 2) D. Domino for Young 黑白染色

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你个不规则的网络格子&#xff0c;有nnn列&#xff0c;每列有aia_iai​个格子&#xff0c;让你将121212的多米诺骨牌无重叠的放进去&#xff0c;问最多能放多少个。 思路&#xff1a; 首先如果点数小的话…

Network 黑暗爆炸 - 3732 倍增lca || Kruskal重构树

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 两点间最长边最小值一定是最小生成树上两点间的最大值&#xff0c;这个比较容易证&#xff0c;就不多说了。 知道这个结论后&#xff0c; 我们直接跑一个KruskalKruskalKruskal建树&#x…

Manacher入门

写在前面 manachermanachermanacher比想象中好理解得多 至少它给了我学习字符串的信心 能干啥 manachermanachermanacher&#xff0c;中文马拉车&#xff08;您别说&#xff0c;这名字还挺形象&#xff09;&#xff0c;主要用于计算字符串每一个位置为对称中心的回文串长度&a…

HDU.6761.Minimum Index(Lyndon分解)

题目大意&#xff1a;给一个字符串&#xff0c;求字符串的所有前缀的最小后缀&#xff1b; 思路&#xff1a;主要还是要理解Lyndon串的算法的整一个过程 参考&#xff1a;搬运来自 #include <iostream> #include <cstdio> #include <fstream> #include <…

C#规范整理·异常与自定义异常

这里会列举在C#中处理CLR异常方面的规范&#xff0c;帮助大家构建和开发一个运行良好和可靠的应用系统。前言迄今为止&#xff0c;CLR异常机制让人关注最多的一点就是“效率”问题。其实&#xff0c;这里存在认识上的误区&#xff0c;因为正常控制流程下的代码运行并不会出现问…

C#中await/async闲说

自从C#5.0增加异步编程之后&#xff0c;异步编程越来越简单&#xff0c;async和await用的地方越来越多&#xff0c;越来越好用&#xff0c;只要用异步的地方都是一连串的异步&#xff0c;如果想要异步编程的时候&#xff0c;需要从底层开始编写&#xff0c;这样后边使用的时候就…

Codeforces Round #619 (Div. 2) E. Nanosoft 思维 + 二维前缀和

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 考虑到最大面积是由四种颜色构成的&#xff0c;且四种颜色可以从中心扩展出去&#xff0c;所以我们分别维护四种颜色的二维前缀和&#xff0c;O(1)O(1)O(1)计算矩阵内颜色的个数。现在我们…

Codeforces Round #701 (Div. 2) E. Move and Swap 思维 + dp

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 由于是按层来的&#xff0c;所以我们肯定先按照层来分组。 定义dp[i]dp[i]dp[i]为红棋在位置iii的时候的最大得分和。 先考虑不换的情况&#xff0c;我们对于每个点都从他的父节点转移过来…

用 docker-compose 启动 WebApi 和 SQL Server

本系列文章所要做出的演示架构基于 .NET Core Web Api、MSSQL、Skywalking 和 nginx &#xff0c;这些都会通过docker-compose一键创建/启动容器&#xff0c;然后用 Azure DevOps 发布上线。所以本系列文章重点并不是如何写好.NET Core&#xff0c;而是围绕着 .NET Core 的容器…