0%

Codeforces Global Round 26

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) { //写复杂了,排好序只需写a[1] == a[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 的值是多少?

模拟