题目链接:HDOJ - 5212 题目分析 首先的思路是,考虑每个数对最终答案的贡献. 那么我们就要求出:对于每个数,以它为 gcd 的数对有多少对. 显然,对于一个数 x ,以它为 gcd 的两个数一定都是 x 的倍数.如果 x 的倍数在数列中有 k 个,那么最多有 k^2 对数的 gcd 是 x . 同样显然的是,对于两个数,如果他们都是 x 的倍数,那么他们的 gcd 一定也是 x 的倍数. 所以,我们求出 x 的倍数在数列中有 k 个,然后就有 k^2 对数满足两个数都是 x 的倍数,这…
题目传送门 /* 设一个b[]来保存每一个a[]的质因数的id,从后往前每一次更新质因数的id, 若没有,默认加0,nlogn复杂度: 我用暴力竟然水过去了:) */ #include <cstdio> #include <iostream> #include <cstring> #include <string> #include <algorithm> using namespace std; ; const int INF = 0x3f3f…
题目传送门 /* 贪心水题:找出出现次数>1的次数和res,如果要减去的比res小,那么总的不同的数字tot不会少: 否则再在tot里减去多余的即为答案 用set容器也可以做,思路一样 */ #include <cstdio> #include <iostream> #include <cstring> #include <string> #include <algorithm> using namespace std; ; const i…
SpringBoot集成Shiro报错 UnavailableSecurityManagerException: No SecurityManager accessible to the calling code [已解决] 调试了好久,网上找了很多方法,,哎,太特么难受了,当知道原因的时候,,一万只草泥马在奔腾... 废话不多说,言归正传: 1.报错日志信息 org.apache.shiro.UnavailableSecurityManagerException: No SecurityMan…
[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/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/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…
题目链接:HDOJ - 5160 题目分析 第一眼看上去,要求统计所有不同排列对答案的贡献.嗯...完全没有想法. 但是,如果我们对每个数字单独考虑,计算这个数字在总答案中的贡献,就容易多了. 对于一个数字 ai ,有 ni 个 .比它大的数字有 p 个,比它小的数字有 q 个.所有的数字一共有 N 个. 首先,比它小的数字对它不会造成影响,所以我们只要考虑它和比它大的数字.那么我们就在 N 个位置中,选 (ni + p) 个位置,给它和比它大的数字. 然后比它大的数字有 x1 种排列,比它小的…
errors made, boundary conditions, <= vs < , decreasing vs increasing , ++, –, '0'/'1' vs 0/1 prototype of sum, return the starting position of c-style string containing the sum, just like sprintf return number of characters successfully read. p1=sum…