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,等今天有空了再看一下

原文地址:https://www.cnblogs.com/baocong/p/6811073.html