Educational Codeforces Round 114 (Rated for Div. 2)
阿新 • • 發佈:2021-10-03
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; }