Codeforces Round #378 (Div. 2)
Posted kisekipurin2019
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #378 (Div. 2)相关的知识,希望对你有一定的参考价值。
题目链接:https://codeforces.com/contest/733
A - Grasshopper And the String
题意:有个虫子,要跳过一个长度为 (n) 的字符串(从 (0) 跳到 (n+1) ),只能停在元音字母处。求最短的跳跃距离。
题解:求前后相邻两个停留位置的差的最大值。
char s[200005];
void test_case() {
scanf("%s", s + 1);
int n = strlen(s + 1);
int lst = 0, maxlen = 0;
for(int i = 1; i <= n; ++i) {
if(s[i] == 'A' || s[i] == 'E' || s[i] == 'I' || s[i] == 'O' || s[i] == 'U' || s[i] == 'Y') {
maxlen = max(maxlen, i - lst);
lst = i;
}
}
maxlen = max(maxlen, n + 1 - lst);
printf("%d
", maxlen);
}
B - Parade
题意:阅兵,第 (i) 行的士兵有 (l_i) 个喜欢先出左脚,有 (r_i) 个喜欢先出右脚。定义阅兵的整齐度为 (|L-R|) ,其中 (L=sum_{i=1}^{n}l_i) ,
(R) 同理。现在可以调整至多一个行的士兵,让他们左右颠倒,求最大的整齐度。
题解:枚举这个行。
int n;
int l[100005];
int r[100005];
void test_case() {
scanf("%d", &n);
for(int i = 1; i <= n; ++i)
scanf("%d%d", &l[i], &r[i]);
ll sumL = 0, sumR = 0;
for(int i = 1; i <= n; ++i) {
sumL += l[i];
sumR += r[i];
}
int ans = 0;
ll cur = abs(sumL - sumR);
ll tsumL = sumL, tsumR = sumR;
for(int i = 1; i <= n; ++i) {
sumL -= l[i];
sumR -= r[i];
sumL += r[i];
sumR += l[i];
ll tmp = abs(sumL - sumR);
if(tmp > cur) {
ans = i;
cur = tmp;
}
sumL = tsumL;
sumR = tsumR;
}
printf("%d
", ans);
}
D - Kostya the Sculptor
题意:找至多两块可以完全贴合(某个面完全一致)的长方体,贴在一起,然后切一个最大的球出来。
题解:考虑要切的是球体,所以受限制的是最短边。所以可以把边排序,把长的两条边作为ID,然后尝试把短边贴在一起,这样有可能会改进答案。所以选个数据结构map就可以。甚至连常数都可以省掉,定义一个struct的前两维是长边,然后按照长边排序,可以贴合的就会排在附近,找出每种前两维相等的struct中最大的两个进行贴合。
int a[3];
map<pair<int, int>, pair<int, int> > M;
void test_case() {
int n;
scanf("%d", &n);
int ansL = 0;
int k = 0;
int k1 = 0, k2 = 0;
for(int i = 1; i <= n; ++i) {
scanf("%d%d%d", &a[0], &a[1], &a[2]);
sort(a, a + 3);
pii &tL = M[{a[1], a[2]}];
if(tL.first == 0) {
if(a[0] > ansL) {
ansL = a[0];
k = 1;
k1 = i;
}
tL = {a[0], i};
} else {
int curL = min(a[1], a[0] + tL.first);
if(curL > ansL) {
ansL = curL;
k = 2;
k1 = i;
k2 = tL.second;
}
if(a[0] > tL.first)
tL = {a[0], i};
}
}
printf("%d
", k);
if(k == 1)
printf("%d
", k1);
else
printf("%d %d
", k1, k2);
}
以上是关于Codeforces Round #378 (Div. 2)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #378 (Div. 2)题解报告
Codeforces Round #378 (Div. 2)
Codeforces Round #378 (Div. 2)
Codeforces Round #378 (Div. 2)