凌晨睡不着 练cf算了

A. Tit for Tat

题意:一行数字,最多k个操作,每次操作可以把不同的两个数一个+1一个-1,并且操作完数字不能为负,问字典序最小的方案。

sb题,选头部数字减尾部数字加就行。

(然后sb题还因为sb码力细节写错wa了一发

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;int num[1000];int main() {int T; scanf("%d", &T);while(T--) {int n, k;scanf("%d%d", &n, &k);for(int i = 1; i <= n; ++i) scanf("%d", &num[i]);int pos = 1;while(1) {if(pos != n) {if(k > num[pos]) num[n] += num[pos], k -= num[pos], num[pos] = 0, pos++;else if(k == num[pos]) {num[n] += num[pos], k -= num[pos], num[pos] = 0;break;}else if(k < num[pos]) {num[pos] -= k, num[n] += k, k = 0;break;}}else break;}for(int i = 1; i <= n; ++i) printf("%d ", num[i]);printf("\n");}return 0;
}

B. AGAGA XOOORRR

题意:一串数字,每次可以让相邻两个数异或合并,问最后能不能让所有数一样并且剩下的串长度至少为2。

一看异或就头大,反正肯定又是个结论题

一开始想拆位dp发现不太会搞,然后我们发现最终答案序列长度一定可以缩短到2或者3(假设有n个相同的2,那么可以把2个合成0,然后0异或别的都是其本身,也就是说可以一直缩短)。

假设长度能缩到2,那两两分组互相异或都是0,因此原序列如果异或和为0一定是合法的(简谐证明我不会,可以暴力证

假设长度能缩到3,那两两分组完剩下那个数字就是全部相同的那个数字,这个数字的大小就是所有数的异或和,因此我们只要能保证原序列能搞出>=2个这个数字就行,从前往后跑异或前缀和每次和总异或和相同就+1。

#include <cstdio>
#include <iostream>
#include <cstring>
#define LL long long
using namespace std;LL num[4000];int main() {int T; scanf("%d", &T);while(T--) {int n; LL pre = 0;scanf("%d", &n);for(int i = 1; i <= n; ++i) {scanf("%lld", &num[i]);pre ^= num[i];}if(!pre) puts("YES");else {LL temp = 0, cnt = 0;for(int i = 1; i <= n; ++i) {temp ^= num[i];if(temp == pre) {temp = 0;++cnt;}}if(!temp && cnt >= 2) puts("YES");else puts("NO");}}return 0;
}

C. Baby Ehab Partitions Again

题意:给一串数字,问你最少删几个数能保证无论怎么把操作完的这串数分成两个子序列,两段的数字和都不一样。

首先数字总和如果是奇数,那随便你分都不可能一样,所以奇数可以直接特判输出0。

完事之后就是经典邮票问题了,dp判断能不能有数字能凑出来sum/2,如果可以踹走一个奇数就行。

但如果原序列一个奇数都没有,我们发现对这个序列同时除以2是不影响答案的,因此我们一直除一直除直到有一个数变成奇数,踹走这个数就行。

因此我们证明了如果要删那最多删一个,删的那个一定是质因数分解后2次幂最低的那个数,因此我们读入的时候把这个数搞出来就行了。

因为sum比较大所以得滚动数组,倒着来。

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;int sum;
int num[4000];
bool dp[400000];int main() {int n;int min_pow = 0x3f3f3f3f;int del_pos;scanf("%d", &n);for(int i = 1; i <= n; ++i) {scanf("%d", &num[i]);sum += num[i];int cnt = 0, temp = num[i];while(temp % 2 == 0) {temp /= 2;cnt++;}if(cnt < min_pow) {min_pow = cnt;del_pos = i;}}if(sum % 2) puts("0");else {dp[0] = true;for(int i = 1; i <= n; ++i) {for(int j = sum + 10; j >= 0; --j) {if(dp[j]) dp[j + num[i]] = true;}}if(!dp[sum / 2]) puts("0");else printf("1\n%d\n", del_pos);}return 0;
}

D. Cut

题意:给一串数,q个询问,每个询问给lr,问最少把[l,r]分几段能够使得每段的乘积=他们的LCM。

显然乘积=LCM当且仅当所有数字全部互素,看一下nq范围显然每次跑个最大团不大行,所以考虑如何优化复杂度。

Codeforces Round #717 Div.2相关推荐

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

    传送门 文章目录 题意: 思路: 题意: 给定长度为nnn的序列,有qqq个询问,每次询问一个区间,输出至少将这个区间分成多少个连续区间才能使每个区间内的数互质. 思路: 首先要判断互质,这个比较容易 ...

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

    Codeforces Round #717 (Div. 2) D 题意:n个数 q个询问,每一个询问有l和r,问你l到r这段区间中最少能分成几段,每一段中的数都是互质的. 思路:首先预处理出每一个点向 ...

  3. Codeforces Round #717 (Div. 2)

    Codeforces Round #717 (Div. 2) CodeForces 1516 题号 题目 知识点 A Tit for Tat 贪心 B AGAGA XOOORRR 思维题 C Baby ...

  4. Codeforces Round #717 (Div. 2) 1516 A. Tit for Tat(模拟)

    LINK 记∑i=1n−1ai=sum\sum\limits_{i=1}^{n-1}a_i=sumi=1∑n−1​ai​=sum 如果可以,我们可以让前n−1n-1n−1个数都减成000,然后ana_ ...

  5. Codeforces Round #717 (Div. 2)(ABCD)

    A. Tit for Tat 从前往后枚举,把前面的数减到0,然后给最后一个数加上去.操作次数没了就停止 #include<bits/stdc++.h> using namespace s ...

  6. Codeforces Round #506 (Div. 3)

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

  7. 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 ...

  8. 构造 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 的例子可以 ...

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

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

最新文章

  1. 十三、面向对象程序设计
  2. python中的选择结构语句是语句_python3控制语句---选择结构语句
  3. tensorflow和keras的版本问题
  4. mysql 多个游标_mysql 存储过程中使用多游标
  5. 计算机基础与组装,1.计算机基础与组装.pptx
  6. vsm java_java – 我尝试使用JAXB将对象编组到xml文件中时,错误为“缺少@XmlRootElement注释”...
  7. kali安装docker(有效详细的教程)
  8. 30天提升技术人的写作力-第十七天
  9. VMware Workstation下载,安装centos7.6 配置【图文教程】
  10. JGrid有用的收藏
  11. c语言输出所有英文字母,菜鸟求助,写一个随机输出26个英文字母的程序
  12. 计算机程序设计在线课程,最新章节测试答案2020学堂在线计算机程序设计基础(先修课)...
  13. python基础之排列组合以及正则表达式
  14. html中加入emjio表情,jqueryemoji表情插件
  15. Chinese-Whisper聚类算法
  16. 数字音频:音频采样率和位深度
  17. 运维工单系统 php,运维平台体系化建设之工单系统
  18. 电子发票电子化报销入账归档 给区块链领域带来了什么样的机遇
  19. iOS 二进制文件分析之常用命令
  20. java采集控制台日志

热门文章

  1. 韩国李世龙19岁当爹 与洪瑛琦姐弟恋开花结果
  2. date.gettime()返回的是什么?
  3. Qt5.9中在Pixmap图片设备上绘制线段实例
  4. Navicat如何连接阿里云数据库RDS
  5. [网络安全自学篇] 九十一.阿里云搭建LNMP环境及实现PHP自定义网站IP访问 (1)
  6. 关于网站性能优化,一张思维导图够了
  7. 【Python数学建模】SEIR传染病模型模型延伸-SEIDR模型(一),加入疫苗接种、政府管控、病毒变异等因素的影响
  8. webpack构建中tree shaking、scope Hoisting(面试题)
  9. AngularJS进阶(四十)创建模块、服务
  10. activated钩子函数