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

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}-12n−1,然后只需要一个一个枚举即可。

#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=nx∑i=1n​ai​=nx(如果ak=xa_k=xak​=x那么它一开始就会被感染,一场比赛可以把其余的aia_iai​都变成xxx,aka_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}\rfloor⌊2n​⌋的数按顺序插到后⌈n2⌉\lceil \frac{n}{2}\rceil⌈2n​⌉的缝隙中的构造结果肯定最优。然后可以扫一遍统计下答案即可。(如果原数组的数不同那么不难发现答案一定是⌊n−12⌋\lfloor \frac{n-1}{2}\rfloor⌊2n−1​⌋)

#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;
}

要加油哦~

Codeforces Round #671 (Div. 2)相关推荐

  1. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

  2. Codeforces Round #563 (Div. 2)/CF1174

    Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...

  3. 构造 Codeforces Round #302 (Div. 2) B Sea and Islands

    题目传送门 1 /* 2 题意:在n^n的海洋里是否有k块陆地 3 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S 4 输出完k个L后,之后全部输出S:) 5 5 10 的例子可以 ...

  4. Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解 比赛链接:h ...

  5. Codeforces Round #712 Div.2(A ~ F) 超高质量题解(每日训练 Day.15 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #712 Div.2(A ~ F) 题解 比赛链接:https:// ...

  6. Codeforces Round #701 (Div. 2) A ~ F ,6题全,超高质量良心题解【每日亿题】2021/2/13

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Add and Divide B - Replace and Keep Sorted C ...

  7. Codeforces Round #700 (Div. 2) D2 Painting the Array II(最通俗易懂的贪心策略讲解)看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 整场比赛的A ~ E 6题全,全部题目超高质量题解链接: Codeforces Round #700 ...

  8. Codeforces Round #699 (Div. 2) F - AB Tree(贪心、树上DP)超级清晰,良心题解,看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #699 (Div. 2) F - AB Tree Problem ...

  9. Codeforces Round #699 (Div. 2) (A ~ F)6题全,超高质量良心题解【每日亿题】2021/2/6

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #699 (Div. 2) (A.B.C)[每日亿题]2021/2/ ...

最新文章

  1. python保存图片到指定路径_python将处理好的图像保存到指定目录下的方法
  2. 华为云网络覆盖全球2500+站点,打造高品质、低成本接入体验
  3. Code 0001: Wait rx completed
  4. Qt--音乐播放器 V2.0
  5. 写JQuery插件的基本知识
  6. 图片旋转,拖拽,缩放,删除一体
  7. C语言--冒泡排序法(详细注释)
  8. 快速部署开源的 Java 博客系统 Tale
  9. 亚马逊产品违反受限政策,亚马逊受限产品恢复在售
  10. Pytorch的grad、backward()、zero_grad()
  11. 13张扑克牌排序算法
  12. 中国Linux云计算行业发展前景及趋势分析
  13. pool win10提示bad_Win10蓝屏问题:BAD_POOL_HEADER
  14. 变压器骨架ERP系统
  15. 责备的近义词_验收测试:责备工具
  16. 达观数据桂洪冠:一文详解达观数据知识图谱技术与应用
  17. 【Java】四种方法遍历List集合元素(Iterator、ListIterator、普通for、增强for)
  18. 戴尔灵越7590电脑风扇起飞,噪音特大
  19. 利用selinum爬取咪咕音乐歌单信息源代码分享
  20. 细说css中的background属性以及一些问题

热门文章

  1. php 重定向数据不丢失,PHP重定向如何实现数据不丢失?
  2. mysql5.7组复制多主一从搭建_MySql5.7-多源复制(多主单从)
  3. 在以下说法错误的是_外行人对翡翠有哪些错误认知?行家给你最精准的答案
  4. 卡屏java_Java drawImage到屏幕上一卡一卡的
  5. js重新渲染div_前端工程师必备:从浏览器的渲染到性能优化
  6. [汇编语言]实验一:查看CPU和内存,用机器指令和汇编指令编程。
  7. C++继承的继承方式
  8. python加载模型包占用内存多大_加载pickle python对象会占用大量内存
  9. 分支程序与循环程序设计-汇编实验二
  10. 邻接表1 - 试在邻接表存储结构上实现图的基本操作 insert_vertex 和 insert_arc-数据结构-图-icoding