Codeforces Round #767 (Div. 2)
A
#include <bits/stdc++.h>
using namespace std;
int n, k;
struct node {
int a, b;
}p[110];
bool cmp(node x, node y)
{
if (x.a == y.a) return x.b > y.b;
return x.a < y.a;
}
int main() {
int T;
cin >> T;
while (T -- ) {
cin >> n >> k;
for (int i = 1; i <= n; i ++ )
cin >> p[i].a;
for (int i = 1; i <= n; i ++ )
cin >> p[i].b;
sort(p + 1, p + 1 + n, cmp);
for (int i = 1; i <= n; i ++ ) {
if (k >= p[i].a) {
k += p[i].b;
}
else break;
}
cout << k << endl;
}
return 0;
}
B
#include <bits/stdc++.h>
using namespace std;
int l, r, k;
int main() {
int T;
cin >> T;
while (T -- ) {
cin >> l >> r >> k;
int len = r - l + 1;
int sum = r / 2 - (l - 1) / 2;
if (k >= len - sum)
cout << "YES" << endl;
else if (r == l && l != 1)
cout << "YES" << endl;
else
cout << "NO" << endl;
}
return 0;
}
C
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int n;
int a[N];
int main() {
int T;
cin >> T;
while (T -- ) {
cin >> n;
map<int, int> Map;
vector<int> p;
for (int i = 1; i <= n; i ++ ) {
cin >> a[i];
if (!Map.count(a[i])) p.push_back(a[i]);
Map[a[i]] ++;
}
sort(p.begin(), p.end());
int pos = -1;
for (int i = 0; i < p.size(); i ++ ) {
if (p[i] == i) pos = i;
else break;
}
vector<int> ans;
for (int i = 1; i <= n; ) {
if (pos == -1) {
for (int j = i; j <= n; j ++ )
ans.push_back(0);
break;
}
int j = i;
set<int> s;
bool flag = 0;
while (j <= n) {
int num = a[j];
Map[num] --;
if (num >= 0 && num <= p[pos]) s.insert(num);
if (s.size() == p[pos] + 1) {
i = j + 1;
ans.push_back(p[pos] + 1);
bool ok = 0;
int last = pos;
for (int k = 0; k <= last; k ++ ) {
if (Map[p[k]] != 0) {
pos = k;
ok = true;
}
else break;
}
if (ok == 0) pos = -1;
flag = 1;
break;
}
j ++;
}
if (!flag) {
int num = 0;
for (auto it = s.begin(); it != s.end(); it ++ ) {
if (*it == num) {num ++; continue;}
else break;
}
ans.push_back(num);
i = j + 1;
}
}
cout << ans.size() << endl;
for (auto x : ans)
cout << x << " ";
cout << endl;
}
return 0;
}
D
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int T, n;
string s[N];
int main() {
cin >> T;
while (T -- ) {
cin >> n;
string s1, s2;
map<string, int> Map;
for (int i = 1; i <= n; i ++ ) cin >> s[i], s1 += s[i];
s2 = s1;
reverse(s1.begin(), s1.end());
if (s1 == s2) {
cout << "YES" << endl;
continue;
}
bool flag = 0;
for (int j = 1; j <= n; j ++ ) {
Map[s[j]] ++;
if (s[j].size() == 1) {
flag = 1;
break;
}
else if (s[j].size() == 2) {
string str = s[j];
string _str = str;
reverse(_str.begin(), _str.end());
if (Map.count(_str)) {
flag = 1;
break;
}
for (char i = 'a'; i <= 'z'; i ++ ) {
string ss = _str + i;
if (Map.count(ss)) {
flag = 1;
break;
}
}
if (flag) break;
}
else {
string str = s[j];
string _str = str;
reverse(_str.begin(), _str.end());
if (Map.count(_str)) {
flag = 1;
break;
}
_str = str.substr(1, 2);
reverse(_str.begin(), _str.end());
if (Map.count(_str)) {
flag = 1;
break;
}
}
}
if (flag) cout << "YES" << endl;
else cout << "NO" << endl;
}
return 0;
}
剩下的题目待补

浙公网安备 33010602011771号