[Link]:https://csacademy.com/contest/round-39/task/reconstruct-sum/ [Description] 给你一个数字S; 让你找有多少对A,B 满足A+B=S 然后再给你一个01串,表示某一位在算加法的时候有没有进位; 在上面的A,B中筛选出符合这个01串的A,B; 输出对数. [Solution] 对S的每一位考虑; 从后往前 如果该位x的后一位进了一位到这一位; 则两个加数在这一位上的需要的数字为x=x-1,否则仍为x 然后看看这一…
[Link]:https://csacademy.com/contest/round-39/task/seven-segment-display/ [Description] 0..9各自有一个数字,代表组成它需要几根棍子; 给你k根棍子,然后问你这k根棍子能够组成的最小数字是多少; [Solution] 数位DP; 设b[0..9]表示对应下标的数码要多少根棍子组成; 设f[i]表示i根棍子能否组成一个数字,如果能的话,组成的数字最小是由几个数码组成的; (为INF表示不能组成); f[0]…
[Link]:https://csacademy.com/contest/round-39/task/circle-elimination/ [Description] [Solution] 把n个点依次标为1..n; 然后按照数字大小给每个人排序(记录它原来的位置); 走到第一个人,然后依次走到下一个人即可; 每次枚举往左走还是往右走即可; [NumberOf WA] 0 [Reviw] [Code] /* */ #include <bits/stdc++.h> #define int lo…
[Link]: [Description] [Solution] 每读入一个x; 把a[(x-1)/2]置为1即可; 统计1的个数 [NumberOf WA] [Reviw] [Code] /* */ #include <bits/stdc++.h> #define int long long using namespace std; int n; int a[100000+100]; main(){ scanf("%lld",&n); for (int i = 1…
[Link]:https://csacademy.com/contest/round-37/task/reconstruct-graph/statement/ [Description] 给你一张图; 包含n个点;m条边; 你可以在这张图的基础上添加边(不能有重边和自环); 使得节点1到节点i的最短距离为d[i] 问你可能的图的个数; [Solution] 对于某一个节点x; 它只能和d的值为d[x]-1或者d[x]的节点直接相连 因为,d的值相同的x和y,如果它们俩之间连一条边的话,它们到节点…
[题目链接]:https://csacademy.com/contest/round-36/task/bicycle-rental/ [题意] 让你从n辆车中选一辆车; 每一辆车有3个属性 1.到达车的身边的时刻 2.车什么时候开始能够被使用 3.车到达它家所需时间; 问你到家的最早时刻. [题解] 车如果晚于可用时间,a+c 否则b+c 取最小值就好 [Number Of WA] 0 [反思] 手速题 [完整代码] #include <bits/stdc++.h> using namespa…
[Link]:https://csacademy.com/contest/round-37/task/group-split/ [Description] 让你把一个数分成两个数a.b的和; (a,b>0) 使得b是a的倍数 问分法个数 [Solution] 设b=x∗a; 则 a+x∗a=n a∗(x+1)=n 这里可以看出来,a必须是n的因子; 再把x分离出来 x=na−1 而x>=1 则 a<=n2 这里n/2实际上就是第二大的因子 所以,这里等价于a< n 于是乎,问题转化…
[Link]:https://csacademy.com/contest/round-37/task/boring-number/ [Description] 让你找离平均数最近的一个数的下标; [Solution] 判断的时候,平均数和枚举的数都乘上n; 这样精度比较高;避免小数比较; [NumberOf WA] 0 [Reviw] empty [Code] #include <bits/stdc++.h> using namespace std; #define lson l,m,rt&l…
[链接]链接 [题意] n个人从左到右站在一条直线上.每个人都有一个能力值g[i],然后每个人可以将相邻的一个人打败. 然后它的能力值能够增加相应的能力值(就是打败了的那个人的能力值). A能够打败B的条件是g[A]+D>=g[B]. n-1次后,只会剩下一个人了. 问你最后的那一个人可能是谁. 输出所有可能的人的编号. [题解] 设dfs(i),表示要找第i个人能不能成为最后的winner. 暴力做的话,肯定会超时的. ->O(N^2)的算法了. 于是我们寻求更快的方法. 我们维护以下两个东…
[链接]h在这里写链接 [题意] 一开始有n个数字,然后有一个数字X,把每个数字都减去X,又生成N个新的数字. 然后把这2*N个数字混在一起. 告诉你这2*N个数字是什么.让你复原出原来的N个数字,以及数字X. 或告知不可能. [题解] 考虑一开始的n个数字a[1],a[2]...a[n]; 假设a[1] <= a[2] <= ... <= a[n]; 然后混起来的2*N个数字. 最小的肯定是a[1]-X. 则,我们枚举a[1]为2..n中的某个数字. 则我们可以暂时算出来X的值. 然后…