Codeforces Global Round 26
A.Strange Splitting
题意:
约定极差为最大值减去最小值。
给定任意一个 n >= 3 的数组,保证数组已经排序,先需要给数组染上红色和蓝色,并满足以下规定:
1.红色元素的极差不等于蓝色元素的极差
2.每种颜色至少有一个元素。
如果不存在请输出“NO”,存在打印合法要求。
构造
只需考虑其中一种颜色的个数为一,即它的极差为0,考虑剩下数组的数是否相同即可。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| void JiuCherish(){ int n; std::cin >> n; for(int i=1;i<=n;i++) std::cin >> a[i]; std::map<int,int> mp; for(int i=1;i<=n;i++) { mp[a[i]]++; } if(mp[a[1]] == n) { std::cout << "NO" << endl; return; } std::cout << "YES" << endl; if(mp[a[1]] == n - 1) { for(int i=1;i<=n;i++) { if(i == 1) { std::cout << "R"; } else { std::cout << "B"; } } } else if(mp[a[n]] == n - 1) { for(int i=1;i<=n;i++) { if(i == n) { std::cout << "R"; } else { std::cout << "B"; } } } else { for(int i=1;i<=n;i++) { if(i == 1) { std::cout << "R"; } else { std::cout << "B"; } } } std::cout << endl; }
|
B.Large Addition
题意:
定义一个大数的数位为:5~9之间的数,如果一个正整数的所有位数都是大数,那么这个正整数就是大数。
现给定一个整数 x , 它可以是两个位数相同的大正整数之和吗?
模拟、数学
由于大数数位的范围,因此除了最高位之外一定会进位,所以我们考虑退位即可,退位的数字不能是19(10 + 9)。
Jiangly的做法:最高位一定为 1 ,最后一位不能为 9 ,且中间的数位不能为 0 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| void JiuCherish(){ i64 x; std::cin >> x; i64 val = 1; i64 now = 0; while(x) { int z = x % 10; z += 10; x /= 10; if(z == 19) { std::cout << "NO" << endl; return; } if(x == 0) { std::cout << "NO" << endl; return; } i64 w = val * (z / 2); now += w; val *= 10; x--; } std::cout << "YES" << endl; }
|
C1.Magnitude (Easy Version)
题意:
给你一个长度为 n 的数组 a 。从 c = 0 开始,然后对从 1 到 n 的每个 i 做一下的操作之一:
1.将 c 变成 c + ai
2.将 c 变成 | c + ai |,(加绝对值)
问以上操作能做到最大的 c 的值是多少?
模拟