打杭电多校打得自闭,熬夜打了场cf找信心。
题目很水,就是题面又臭又长。
题目链接:https://codeforces.com/contest/1196/
A:
看得好像很复杂,一看样例,答案正好就是三个数加起来除2。
1 /* basic header */ 2 #include <bits/stdc++.h> 3 /* define */ 4 #define ll long long 5 #define dou double 6 #define pb emplace_back 7 #define mp make_pair 8 #define sot(a,b) sort(a+1,a+1+b) 9 #define rep1(i,a,b) for(int i=a;i<=b;++i) 10 #define rep0(i,a,b) for(int i=a;i<b;++i) 11 #define eps 1e-8 12 #define int_inf 0x3f3f3f3f 13 #define ll_inf 0x7f7f7f7f7f7f7f7f 14 #define lson (curpos<<1) 15 #define rson (curpos<<1|1) 16 /* namespace */ 17 using namespace std; 18 /* header end */ 19 20 int q; 21 22 int main() { 23 cin >> q; 24 while (q--) { 25 ll sum = 0, a, b, c; cin >> a >> b >> c; 26 sum = (a + b + c) / 2; 27 cout << sum << endl; 28 } 29 return 0; 30 }
B:
前缀和维护区间奇偶性,然后贪心找和为奇数的区间即可,因为和为偶数的区间一定能跟相邻的奇区间合并。
1 /* basic header */ 2 #include <bits/stdc++.h> 3 /* define */ 4 #define ll long long 5 #define dou double 6 #define pb emplace_back 7 #define mp make_pair 8 #define sot(a,b) sort(a+1,a+1+b) 9 #define rep1(i,a,b) for(int i=a;i<=b;++i) 10 #define rep0(i,a,b) for(int i=a;i<b;++i) 11 #define eps 1e-8 12 #define int_inf 0x3f3f3f3f 13 #define ll_inf 0x7f7f7f7f7f7f7f7f 14 #define lson (curpos<<1) 15 #define rson (curpos<<1|1) 16 /* namespace */ 17 using namespace std; 18 /* header end */ 19 20 const int maxn = 2e5 + 10; 21 // const int maxn = 10; 22 int q, a[maxn]; 23 vector<int>ans; 24 25 int main() { 26 scanf("%d", &q); 27 while (q--) { 28 int n, k; 29 ans.clear(); 30 scanf("%d%d", &n, &k); 31 rep1(i, 1, n) { 32 int x; scanf("%d", &x); 33 if (x & 1) a[i] = 1; else a[i] = 0; 34 a[i] += a[i - 1]; 35 } 36 int re = k, flag = 1, lastPos = 0; 37 rep1(i, 1, n) { 38 if (re == 1) 39 if ((a[n] - a[i - 1]) % 2) { 40 re--; ans.pb(n); break; 41 } else { 42 flag = 0; break; 43 } 44 if ((a[i] - a[lastPos]) % 2) { 45 re--; 46 ans.pb(i); 47 lastPos = i; 48 } 49 } 50 if (flag && !re) { 51 // have solution 52 puts("YES"); 53 for (auto i : ans) printf("%d ", i); 54 puts(""); 55 } else puts("NO"); 56 } 57 return 0; 58 }
C:
维护答案x和y可能出现的范围,最后检查是否合法即可。
1 /* basic header */ 2 #include <bits/stdc++.h> 3 /* define */ 4 #define ll long long 5 #define dou double 6 #define pb emplace_back 7 #define mp make_pair 8 #define sot(a,b) sort(a+1,a+1+b) 9 #define rep1(i,a,b) for(int i=a;i<=b;++i) 10 #define rep0(i,a,b) for(int i=a;i<b;++i) 11 #define eps 1e-8 12 #define int_inf 0x3f3f3f3f 13 #define ll_inf 0x7f7f7f7f7f7f7f7f 14 #define lson (curpos<<1) 15 #define rson (curpos<<1|1) 16 /* namespace */ 17 using namespace std; 18 /* header end */ 19 20 int main() { 21 int q; 22 scanf("%d", &q); 23 while (q--) { 24 int n, xl = -100000, xr = 100000, yu = 100000, yd = -100000; 25 scanf("%d", &n); 26 rep1(i, 1, n) { 27 int x, y, f1, f2, f3, f4; scanf("%d%d%d%d%d%d", &x, &y, &f1, &f2, &f3, &f4); //zuo shang you xia 28 if (f1 + f2 + f3 + f4 == 4) continue; 29 if (!f1) xl = max(xl, x); 30 if (!f2) yu = min(yu, y); 31 if (!f3) xr = min(xr, x); 32 if (!f4) yd = max(yd, y); 33 } 34 // ans 35 if (xl <= xr && yu >= yd) printf("1 %d %d ", xl, yd); 36 else puts("0"); 37 } 38 return 0; 39 }
D1:
没什么可说的,就是暴力。
1 /* basic header */ 2 #include <bits/stdc++.h> 3 /* define */ 4 #define ll long long 5 #define dou double 6 #define pb emplace_back 7 #define mp make_pair 8 #define sot(a,b) sort(a+1,a+1+b) 9 #define rep1(i,a,b) for(int i=a;i<=b;++i) 10 #define rep0(i,a,b) for(int i=a;i<b;++i) 11 #define eps 1e-8 12 #define int_inf 0x3f3f3f3f 13 #define ll_inf 0x7f7f7f7f7f7f7f7f 14 #define lson (curpos<<1) 15 #define rson (curpos<<1|1) 16 /* namespace */ 17 using namespace std; 18 /* header end */ 19 20 const int maxn = 2e3 + 10; 21 char s[maxn]; 22 map<char, char>m; 23 24 int main() { 25 m['R'] = 'G'; m['G'] = 'B'; m['B'] = 'R'; 26 int q; scanf("%d", &q); 27 while (q--) { 28 int n, k, ans = int_inf; scanf("%d%d", &n, &k); 29 scanf("%s", s + 1); 30 for (int i = 1; i + k - 1 <= n; i++) { 31 char curr = 'R'; int cnt = 0; 32 rep1(j, i, i + k - 1) { 33 if (s[j] != m[curr]) cnt++; 34 curr = m[curr]; 35 } 36 ans = min(ans, cnt); 37 curr = 'G'; cnt = 0; 38 rep1(j, i, i + k - 1) { 39 if (s[j] != m[curr]) cnt++; 40 curr = m[curr]; 41 } 42 ans = min(ans, cnt); 43 curr = 'B'; cnt = 0; 44 rep1(j, i, i + k - 1) { 45 if (s[j] != m[curr]) cnt++; 46 curr = m[curr]; 47 } 48 ans = min(ans, cnt); 49 } 50 printf("%d ", ans); 51 } 52 return 0; 53 }
D2:
dp。
1 /* basic header */ 2 #include <bits/stdc++.h> 3 /* define */ 4 #define ll long long 5 #define dou double 6 #define pb emplace_back 7 #define mp make_pair 8 #define sot(a,b) sort(a+1,a+1+b) 9 #define rep1(i,a,b) for(int i=a;i<=b;++i) 10 #define rep0(i,a,b) for(int i=a;i<b;++i) 11 #define eps 1e-8 12 #define int_inf 0x3f3f3f3f 13 #define ll_inf 0x7f7f7f7f7f7f7f7f 14 #define lson (curpos<<1) 15 #define rson (curpos<<1|1) 16 /* namespace */ 17 using namespace std; 18 /* header end */ 19 20 const int maxn = 2e5 + 10; 21 const string rgb = "RGB"; 22 int q, n, k, dp[maxn]; 23 char s[maxn]; 24 25 int solve(int x) { 26 rep1(i, 1, n) { 27 dp[i] = dp[i - 1] + (rgb[x] != s[i]); 28 x = (x + 1) % 3; 29 } 30 int ret = dp[k]; 31 for (int i = k + 1; i <= n; i++) 32 ret = min(ret, dp[i] - dp[i - k]); 33 return ret; 34 } 35 36 int main() { 37 scanf("%d", &q); 38 while (q--) { 39 scanf("%d%d", &n, &k); 40 scanf("%s", s + 1); 41 int ans = min(min(solve(0), solve(1)), solve(2)); 42 printf("%d ", ans); 43 } 44 return 0; 45 }
E && F:
据说是裸题,没做待补。