T2
蓝桥的 oj 在 for 循环加上 cerr 的调试信息居然给 WA 了,加到外边又不 WA,难评。
T3
过两天一看,一眼就会了
T4
看反输入了,WA 了几次才发现。
用 Binary Indexed Trees 离散化过的。
void solve(){
cin >> n;
for(int i = 1; i <= n; i ++){
cin >> b[i];
t[i] = b[i];
}
for(int i = 1; i <= n; i ++){
cin >> a[i];
t[n + i] = a[i];
}
sort(t + 1, t + 2 * n + 1);
sz = unique(t + 1, t + 2 * n + 1) - t - 1;
for(int i = 1; i <= n; i ++){
a[i] = lower_bound(t + 1, t + sz + 1, a[i]) - t;
}
for(int i = 1; i <= n; i ++){
b[i] = lower_bound(t + 1, t + sz + 1, b[i]) - t;
}
int res = 0;
sort(b + 1, b + n + 1);
for(int i = 1; i <= n; i ++){
add(a[i], 1);
res += ask(1, b[i] - 1);
}
cout << res ;
}
T5
对每个国家求方案,用乘法原理算到一起
T6
题目其实挺简单的,明显是二分。没看到按顺序分配,导致以为很难。
bool check(int M) {
for(int i = 1; i <= n; i ++){
if(a[i] > M) {
return false;
}
}
int remain = M;
int res = 1;
for(int i = 1; i <= n; i ++){
fg:
if(a[i] + b[i] <= remain) {
remain -= a[i] + b[i];
}
else if(a[i] <= remain){
int t = a[i] + b[i] - remain;
res += (t + M - 1) / M;
remain = M - t % M;
}
else if(a[i] > remain) {
res ++;
remain = M;
goto fg;
}
}
return res <= T;
}
void solve(){
cin >> n >> T;
for(int i = 1; i <= n; i ++){
cin >> a[i];
}
for(int i = 1; i <= n; i ++){
cin >> b[i];
}
b[n] = 0;
if(check(3600) == false) {
cout << -1;
return ;
}
int l = 1, r = 3600;
while(l < r) {
int mid = l + r >> 1;
if(check(mid)) r = mid;
else l = mid + 1;
}
cout << l;
}
总体评价
cd 1400 大概就能 AK,但是我一开始做的不太好。