Codeforces Round #411 (Div. 2)
链接:http://codeforces.com/contest/805
A. Fake NP
题意:
给你一个区间,对于每个数写下它的因子,问你写的次数最多的那个
题解:
这道题其实代码很短,只要l==r答案就是r,否则答案是2,然而我却傻逼的看错题,被人hack了三次之后
才知道原来一个数同一个因子取一次就好了,附上奇葩的ac代码
代码:
31 int main() { 32 int l, r; 33 cin >> l >> r; 34 if (r - l > 100) cout << 2 << endl; 35 else { 36 map<int, int> mmp; 37 rep(num, l, r + 1) { 38 int n = num; 39 for (int i = 2; i*i <= n; i++) { 40 if (n % 2 == 0) mmp[i]++; 41 while (n%i == 0) n /= i; 42 } 43 if (n != 1) mmp[n] = 1; 44 } 45 int sum = 0, ans; 46 for (auto i : mmp) if (i.second > sum) { 47 sum = i.second; 48 ans = i.first; 49 } 50 cout << ans << endl; 51 } 52 return 0; 53 }
B. 3-palindrome
题意:
用a,b,c造一个字符串,要求任意连续的三个不是回文,且c出现的次数最少
题解:
不管是多少的字符串,就aabbaabbaabb...无限循环下去好了
代码:
31 int main() { 32 int n; 33 cin >> n; 34 string ans; 35 rep(i, 0, n) { 36 if (i / 2 % 2) ans += 'b'; 37 else ans += 'a'; 38 } 39 cout << ans << endl; 40 return 0; 41 }
C. Find Amir
题意:
给你一个图,编号从1到n,任意两个点之间都是连同的,距离为(i+j)mod(n+1),求遍历所有点的最小路程
题解:
很明显,贪心,从1到n,然后到n-1,再到2,所以答案分奇偶了
代码:
31 int main() { 32 int n; 33 cin >> n; 34 if (n % 2 == 0) cout << n / 2 - 1; 35 else cout << n / 2; 36 return 0; 37 }
D. Minimum number of steps
题意:
给你一个只由ab组成的字符串,你每次能把ab变成bba,问你能变多少次
题解:
从后往前遍历,把ab变成bba之后,最后的那个a肯定是没用了,而bb分别能和前面a变换一次,所以就是统计b的个数
遇到b,b的个数++,遇到a就相当于b的个数*2
代码:
31 int main() { 32 string s; 33 cin >> s; 34 ll ans = 0; 35 int cnt = 0; 36 per(i, 0, s.length()) { 37 if (s[i] == 'b') cnt++; 38 else { 39 ans = (ans + cnt) % MOD; 40 cnt = cnt * 2 % MOD; 41 } 42 } 43 cout << ans << endl; 44 return 0; 45 }
E. Ice cream coloring
A题被hack成傻逼,根本没机会看e,等今天有空了再看一下