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…

Codeforces Round #617 (Div. 3) F. Berland Beauty 思维

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给定一棵树&#xff0c;再给定若干两点最短路之间边权的最小值&#xff0c;让你给树的边权赋值&#xff0c;使得满足给定的条件&#xff0c;如果不存在输出−1-1−1。 思路&#xff1a; 观察一个性质&…

书籍推荐:《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…

使用 docker 部署常用的开发环境

使用 docker 部署常用的开发环境Intro前段时间电脑之前返厂修了&#xff0c;所有的软件都要重新装一遍&#xff0c;很麻烦&#xff0c;既然用了 docker 有些环境就直接用 docker 部署了&#xff0c;免去了还要再下载软件重新安装的麻烦。部署 SqlServerdocker 部署 SqlServer 2…

Codeforces Round #617 (Div. 3) E2. String Coloring (hard version) 思维 + dp + Dilworth定理

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 让你给一个串染色&#xff0c;不同颜色且相邻的一对字符可以互换位置&#xff0c;用最少的颜色&#xff0c;使交换后这个字符串字典序最小。 思路&#xff1a; 考虑将字符串分成若干个非递减的子序列&…

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

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

Codeforces Round #716 (Div. 2) D. Cut and Stick 主席树 + 思维

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你个长为nnn的数组aaa&#xff0c;定义好的区间为这个区间中每个数出现的次数≤⌈n2⌉\le \left \lceil \frac{n}{2} \right \rceil≤⌈2n​⌉&#xff0c;定义划分为将这个区间的若干个子序列拿出来构成若…

如何从现在开始写博客?

在前不久知名博主《纯洁的微笑》在博客园分享了他写博客的心得&#xff0c;获得了读者圈的广泛共鸣&#xff0c;同时也引起了一些老生常谈的争议&#xff0c;这样的讨论在我们长沙.NET技术社区内部也经常发生。1、写博客的好处在《软技能代码之外的生存指南》这本书中&#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 将重点转向稳定性&…

Codeforces Round #712 (Div. 2) F. Flip the Cards 思维 + 贪心

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你nnn张卡片&#xff0c;每张卡片正面写有数字aaa&#xff0c;反面写有数字bbb&#xff0c;[1,2∗n][1,2*n][1,2∗n]之间的整数在这些数字中都恰好出现一次&#xff0c;我们认为这nnn张牌是排好序的当且仅…

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

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

[牛客] Tree-换根dp(预防加法取模导致等0)

链接&#xff1a;https://ac.nowcoder.com/acm/problem/19782 题目&#xff1a;修修去年种下了一棵树&#xff0c;现在它已经有n个结点了。 修修非常擅长数数&#xff0c;他很快就数出了包含每个点的连通点集的数量。 澜澜也想知道答案&#xff0c;但他不会数数…

Educational Codeforces Round 81 (Rated for Div. 2) F.Good Contest \ 洛谷 划艇 组合 计数dp

cf传送门 P3643 [APIO2016]划艇 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; aia_iai​在[li,ri][l_i,r_i][li​,ri​]等概率随机选一个数&#xff0c;求aaa数组不增的概率。 思路&#xff1a; 这里贴了两个链接&#xff0c;因为这俩题是极其相似的&#xff0…

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

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

2020牛客多校第1场H-Minimum-cost Flow-最小费用流

https://ac.nowcoder.com/acm/contest/5666/H 题目大意&#xff1a;给出了每一条边的费用&#xff0c;有q个询问&#xff0c;问当每一条边的容量为u/v时&#xff0c;通过1流量的最小费用是多少。 思路&#xff1a;很明显这道题只能跑一次费用流&#xff0c;那我们跑一次全部边…

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

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给定长度为nnn的序列&#xff0c;有qqq个询问&#xff0c;每次询问一个区间&#xff0c;输出至少将这个区间分成多少个连续区间才能使每个区间内的数互质。 思路&#xff1a; 首先要判断互质&#xff0c;这…