Educational Codeforces Round 114 (Rated for Div. 2)
A
想咋构造咋构造
代码:
#include <stdio.h>
int main(){
int t;
scanf("%d", &t);
for (int i = 1; i <= t; i++){
int n;
scanf("%d", &n);
for (int j = 1; j <= n; j++){
for (int k = 1; k <= j; k++){
printf("(");
}
for (int k = 1; k <= j; k++){
printf(")");
}
for (int k = j + 1; k <= n; k++){
printf("()");
}
printf("\n");
}
}
return 0;
}
B
想咋找规律咋找规律
代码:
#include <stdio.h>
inline int max(int a, int b){
return a > b ? a : b;
}
inline int min(int a, int b){
return a < b ? a : b;
}
int main(){
int t;
scanf("%d", &t);
for (int i = 1; i <= t; i++){
int a, b, c, m;
scanf("%d %d %d %d", &a, &b, &c, &m);
if (m >= max(a, max(b, c)) - (a + b + c - max(a, max(b, c)) - min(a, min(b, c))) - min(a, min(b, c)) - 1 && m <= a + b + c - 3){
printf("YES\n");
} else {
printf("NO\n");
}
}
return 0;
}
C
容易证明,选择战斗力第一个 \(\geq b\) 的英雄或第一个战斗力比他小的英雄一定可以取到最优解。
代码:
#include <algorithm>
#include <cstdio>
using namespace std;
typedef long long ll;
ll a[200007];
int main(){
int n, m;
ll sum = 0;
scanf("%d", &n);
for (int i = 1; i <= n; i++){
scanf("%lld", &a[i]);
sum += a[i];
}
sort(a + 1, a + n + 1);
scanf("%d", &m);
for (int i = 1; i <= m; i++){
int pos;
ll x, y, ans = 0x7fffffffffffffffll;
scanf("%lld %lld", &x, &y);
pos = lower_bound(a + 1, a + n + 1, x) - a;
if (pos > 1) ans = min(ans, (x - a[pos - 1]) + max(y - (sum - a[pos - 1]), 0ll));
if (pos <= n) ans = min(ans, max(y - (sum - a[pos]), 0ll));
printf("%lld\n", ans);
}
return 0;
}

浙公网安备 33010602011771号