1. 程式人生 > 其它 >Educational Codeforces Round 114 (Rated for Div. 2)

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;
}