Codeforces Round #671 (Div. 2)

当天晚上,本来想参加一下比赛,结果感觉静不下心来做题,而且最难受的是读个题都不明白,一直在理解题意·。·

A - Digit Game

分析不难发现:
如果nnn是奇数,那么最后留下的数字一定是奇数位上的数字,如果奇数位上的数字至少存在一个奇数,那么先手必胜。
如果nnn是偶数,那么最后留下的数字一定是偶数位上的数字,如果偶数位上的数字至少存在一个凑数,那么后手必胜。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
int n;
int main()
{IO;int T=1;cin>>T;while(T--){cin>>n;string s;cin>>s;s="."+s;bool ok;if(n&1){ok=0;for(int i=1;i<=n;i++)if(i%2==1&&(s[i]-'0')%2==1) ok=1;}else{ok=1;for(int i=1;i<=n;i++){if(i%2==0&&(s[i]-'0')%2==0) ok=0;}}if(ok) cout<<1<<'\n';else cout<<2<<'\n';}return 0;
}

B - Stairs

首先只要知道每个楼梯的边长,那么可以用等差数列求出所有小方块的个数。楼梯的边长2n−12^{n}-12n1,然后只需要一个一个枚举即可。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
int main()
{IO;int T=1;cin>>T;while(T--){ll x;cin>>x;ll s=0;int res=0;ll a=1;for(int i=1;;i++){ll now=2*a-1;s+=1ll*now*(now+1)/2;if(s<=x) res++;else break;a<<=1;}cout<<res<<'\n';}return 0;
}

C - Killjoy

这题我也读了很久才理解题意
不难发现最终答案就三种情况{0,1,2}\{0,1,2\}{0,1,2}
000:最初所有ai=xa_i=xai=x
111:存在ai=xa_i=xai=x或者∑i=1nai=nx\sum_{i=1}^{n}a_i=nxi=1nai=nx(如果ak=xa_k=xak=x那么它一开始就会被感染,一场比赛可以把其余的aia_iai都变成xxxaka_kak用来调整保证改变之和为000
222:其余情况答案都是2

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=1010;
int a[N];
int n,x;
int main()
{IO;int T=1;cin>>T;while(T--){cin>>n>>x;int s=0;bool ok1=1;bool ok2=0;for(int i=1;i<=n;i++){cin>>a[i];if(a[i]!=x) ok1=0;if(a[i]==x) ok2=1;s+=a[i];}if(ok1) cout<<0<<'\n';else if(ok2||s==n*x) cout<<1<<'\n';else cout<<2<<'\n';}return 0;
}

D1 - Sage’s Birthday (easy version)

分析可知先把原数组排序,然后把前⌊n2⌋\lfloor \frac{n}{2}\rfloor2n的数按顺序插到后⌈n2⌉\lceil \frac{n}{2}\rceil2n的缝隙中的构造结果肯定最优。然后可以扫一遍统计下答案即可。(如果原数组的数不同那么不难发现答案一定是⌊n−12⌋\lfloor \frac{n-1}{2}\rfloor2n1

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=100010;
int a[N],b[N],c[N];
int n;
int main()
{IO;int T=1;//cin>>T;while(T--){cin>>n;for(int i=1;i<=n;i++) cin>>a[i];sort(a+1,a+1+n);for(int i=1;i<=n/2;i++) b[i]=a[i];for(int i=n/2+1;i<=n;i++) c[i-n/2]=a[i];cout<<(n-1)/2<<'\n';for(int i=1;i<=(n+1)/2;i++){cout<<c[i]<<' ';if(i<=n/2) cout<<b[i]<<' ';}cout<<'\n';}return 0;
}

D2 - Sage’s Birthday (hard version)

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=100010;
int a[N],b[N],c[N];
int n;
int main()
{IO;int T=1;//cin>>T;while(T--){cin>>n;for(int i=1;i<=n;i++) cin>>a[i];sort(a+1,a+1+n);for(int i=1;i<=n/2;i++) b[i]=a[i];for(int i=n/2+1;i<=n;i++) c[i-n/2]=a[i];for(int i=1,j=1;i<=(n+1)/2;i++){a[j++]=c[i];if(i<=n/2) a[j++]=b[i];}int res=0;for(int i=2;i<n;i++)if(a[i]<a[i-1]&&a[i]<a[i+1]) res++;cout<<res<<'\n';for(int i=1;i<=n;i++) cout<<a[i]<<' ';cout<<'\n';}return 0;
}

E - Decryption

说点儿废话:2020/9/20下午,在图书馆看了一下这个题,好不容易分析出如何构造能够得出答案,然后回寝室一直调代码调到12点,调代码能力还是太菜了,不能把想法快速实现还要多练。现在已经凌晨了2020/9/21,明天早上第一节没有课,爬起来把题解补了。

考虑将nnn分解质因数,可得n=p1a1×p2a2×…×piain=p_1^{a_1}×p_2^{a_2}×\dots\ ×p_i^{a_i}n=p1a1×p2a2× ×piai
考虑这样一组排列方式的构造{[p1,p12,…,p1a1],[],[pi,pi2,…,piai]}\{[p_1,p_1^2,\dots, p_1^{a_1}],[],[p_i,p_i^2,\dots, p_i^{a_i}]\}{[p1,p12,,p1a1],[],[pi,pi2,,piai]}不难发现中间[][][]中只要包含p1p_1p1那么无论怎么排列一定不互质(存在相同因子p1p_1p1),因此中间括号只需要用dfs求出所有包含p1p_1p1质因子的约数即可(但是我们需要让nnn放置在最后)。根据dfs的性质,[][][]中的最后一个数一定有质因子pip_ipi(当前最后一个质因数),那么我们下一个排的时候就要排pip_ipi因此每次需要和当前最后一个质因数交换一下位置。

根据上述构造可得当且仅当一个数的质因数是2并且质因子的指数都是1(n=p1×p2n=p_1×p_2n=p1×p2)才需要插入一个最小公倍数,否则都不需要插入最小公倍数

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
#define p first
#define a second
using namespace std;
typedef pair<int,int> pii;
typedef long long ll;
const int N=200010;
pii d[N];
int cnt,n,idx;
ll ans[N];
void divide(int x)
{idx=cnt=0;for(int i=2;i<=x/i;i++)if(x%i==0){d[++cnt].p=i;d[cnt].a=0;while(x%i==0) x/=i,d[cnt].a++;}if(x>1) {d[++cnt].p=x;d[cnt].a=1;}
}
void dfs(int u,ll now)
{for(int i=u;i<=cnt;i++){ll p=1;for(int j=1;j<=d[i].a;j++){p*=d[i].p;if(now*p!=n) ans[++idx]=now*p;dfs(i+1,now*p);}}
}
int main()
{IO;int T=1;cin>>T;while(T--){cin>>n;divide(n);for(int i=1;i<=cnt;i++){ll p=1;for(int k=1;k<=d[i].a;k++) {p*=d[i].p;if(p!=n) ans[++idx]=p;//注意把n放在最后}//括号间的数p=1;for(int k=1;k<=d[i].a;k++) {p*=d[i].p;dfs(i+1,p);}if(i<cnt) swap(d[i+1],d[cnt]);}for(int i=1;i<=idx;i++) cout<<ans[i]<<' ';cout<<n<<'\n';if(cnt==2&&d[1].a==1&&d[2].a==1) cout<<1<<'\n';else cout<<0<<'\n';}return 0;
}

要加油哦~

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

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

相关文章

【网络流】人员雇佣(luogu 1791)

正题 luogu 1791 题目大意 有n个人&#xff0c;选择第i个人的代价是aia_iai​&#xff0c;如果i,j同时被选那么有贡献wi,jw_{i,j}wi,j​&#xff0c;如果i选了j没选那么有贡献−wi,j-w_{i,j}−wi,j​&#xff0c;问你最大贡献&#xff08;减去代价&#xff09; 解题思路 最大…

AT4144-[ARC098D]Donation【Kruskal重构树,dp】

正题 题目链接:https://www.luogu.com.cn/problem/AT4144 题目大意 nnn个点mmm条边的一张无向联通图&#xff0c;每个点有两个值ai,bia_i,b_iai​,bi​。表示经过该点时需要拥有aia_iai​元&#xff0c;该点需要捐献bib_ibi​元。 任意起点&#xff0c;询问开始时至少多少钱才…

Strategic game

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 10000K&#xff0c;其他语言20000K 64bit IO Format: %lld题目描述 Bob enjoys playing computer games, especially strategic games, but sometimes he c…

ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(一)

上个月15日&#xff0c;上海MVP做了一次线下的技术分享活动&#xff0c;我分享的主题是《快速构建容器化的ASP.NET Core应用程序》&#xff0c;有关这次活动的简报&#xff0c;可以参考这里。另外&#xff0c;我的主题分享的PPT也可以点击这里下载。由于线下活动时间紧迫&#…

牛客练习赛 63 F-牛牛的树行棋

F-牛牛的树行棋 大佬题解 对于每一个棋子来说&#xff0c;都是独立的&#xff0c;因此当前局面的 SG 值就是每一枚棋子的 SG 值的异或和。若一枚棋子的往子树内最多可以走 kkk 步&#xff0c;它的 SG 值为 kkk。然后就可以dfs求出整个局面的SG值。 仔细再思考一步&#xff1a…

【DP】小学生语文题(jzoj 5102)

正题 jzoj 5102 题目大意 给你两个串A,B&#xff0c;字母个数相等&#xff0c;可以把B的一个字符移到前面某个位置&#xff0c;问你最少移多少次可以使A,B相等 解题思路 设fi,jf_{i,j}fi,j​为A匹配了i-n&#xff0c;B用了j-n 1.当i,j匹配时fi,jfi1,j1f_{i,j}f_{i1,j1}fi,j…

AT3949-[AGC022D]Shopping【贪心】

正题 题目链接:https://www.luogu.com.cn/problem/AT3949 题目大意 长度为LLL的坐标轴上&#xff0c;给出nnn个点&#xff0c;每个点xix_ixi​需要购物tit_iti​的时间&#xff0c;一辆车在0∼L0\sim L0∼L折返跑&#xff0c;求从000出发购物完回到000的最短时间。 n∈[1,310…

现代软件工程的《构建之法》

要想了解世界&#xff0c;就必须亲自来打造它。—— 帕韦泽&#xff08;Cesare Pavese&#xff09;国庆假日期间&#xff0c;我重读了邹欣老师的《构建之法》一书。我从事软件行业相关工作超过15年&#xff0c;每每在被问到给在校计算机专业大学生的学习建议时&#xff0c;我都…

牛客练习赛 62

A.牛妹的游戏 Ramsey定理&#xff1a;人话解释任意六个人中要么至少三个人认识&#xff0c;要么至少三个不认识。 结论简要证明: 假设 666 个据点分别为 A,B,C,D,E,FA,B,C,D,E,FA,B,C,D,E,F那么在 A 连向其它据点的控制链中&#xff0c;必然至少有 333条链被同一方控制&#x…

【图论】【斜率优化】前往大都会(loj 2769)

正题 jzoj 7181 题目大意 给你由若干铁路组成的图&#xff08;一个铁路上有若干点&#xff09;&#xff0c;问你从1到n在最短路径的前提下&#xff0c;乘坐的每一条铁路所花费时间的平方和的最大值 解题思路 先用dij跑出最短路图&#xff08;即长度等于最短路的所有路径&…

AT4995-[AGC034E] Complete Compress【树形dp】

正题 题目链接:https://www.luogu.com.cn/problem/AT4995 题目大意 nnn个点的一棵树&#xff0c;上面有一些棋子&#xff0c;每次可以选择两个棋子移动到他们之间的路径上相邻的点上&#xff0c;求最少多少步能移动到一个点上。 n∈[1,2000]n\in[1,2000]n∈[1,2000] 解题思路 …

【每日一题】8月10日题目精讲—排座椅

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 51200K&#xff0c;其他语言102400K 64bit IO Format: %lld题目描述 上课的时候总有一些同学和前后左右的人交头接耳&#xff0c;这是令小学班主任十分头疼的…

使用Consul做服务发现的若干姿势

从2016年起就开始接触Consul&#xff0c;使用的主要目的就是做服务发现&#xff0c;后来逐步应用于生产环境&#xff0c;并总结了少许使用经验。最开始使用Consul的人不多&#xff0c;为了方便交流创建了一个QQ群&#xff0c;这两年微服务越来越火&#xff0c;使用Consul的人也…

【费用流】【线性规划】志愿者招募(luogu 3980)

正题 luogu 3980 题目大意 有n个时刻&#xff0c;第i个时刻需要aia_iai​个志愿者&#xff0c;有m类志愿者&#xff0c;第j类可以从ljl_jlj​做到rjr_jrj​&#xff0c;代价为wjw_jwj​&#xff0c;数量无限&#xff0c;问你使所有时刻志愿者个数都足够的最小代价 解题思路 …

YbtOJ#643-机器决斗【贪心,李超树】

正题 题目链接:https://www.ybtoj.com.cn/problem/643 题目大意 nnn个机器人&#xff0c;第iii个攻击力为AiA_iAi​&#xff0c;防御为DiD_iDi​。 然后你每次可以对一个机器人造成AtkAtkAtk点伤害&#xff0c;之后所有机器人对你进行一次攻击。 开局可以删除两个机器人&…

【每日一题】8月11日题目精讲—矩阵消除游戏

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 牛妹在玩一个名为矩阵消除的游戏&#xff0c;矩阵的大小是n行m列&#xff0c;第i行第…

牛客练习赛 61(待补F-点分治?)

A. 打怪 先求出每次打死一只怪需要掉多少血&#xff0c;然后就直接算出能够打死多少只。 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<algorithm> using namespace std; int main() {IO…

asp.net core集成CAP(分布式事务总线)

一、前言感谢杨晓东大佬为社区贡献的CAP开源项目&#xff0c;传送门在此&#xff1a;.NET Core 事件总线,分布式事务解决方案&#xff1a;CAP 以及 如何在你的项目中集成 CAP【手把手视频教程】&#xff0c;之前也在工作中遇到分布式数据一致性的问题&#xff0c;也一直都是基于…

Ybt#452-序列合并【期望dp】

正题 题目链接:https://www.ybtoj.com.cn/contest/113/problem/2 题目大意 一个空序列&#xff0c;每次往末尾加入一个[1,m][1,m][1,m]中的随机一个数。如果末尾两个数相同都为xxx且(x<t)(x<t)(x<t)&#xff0c;那么将它们合并成x1x1x1。 如果序列长度为nnn且无法合…

【Trie】【费用流】管道监控(loj 3026)

正题 loj 3026 题目大意 给你一棵树&#xff0c;和若干匹配串&#xff0c;如果一个节点向下的某条链构成了匹配串i&#xff0c;则可以花费这w_i匹配这条链&#xff0c;问你匹配完所有点的最小代价 解题思路 这题可以理解为树上树上的线性规划 先对于每个匹配串倒着建trie&a…