A
[link](https://atcoder.jp/contests/abc366/tasks/abc366_a]
判断一下少的那个人加上剩下的所有票是否会超过另一个人,如果超过,不确定,否则目前票多的必胜。
神奇的代码
#include<bits/stdc++.h>using namespace std;signed main(){int n,a,b;cin >> n >> a >> b;int s = n-a-b;if(a < b){if(a+s > b){cout << "No";}else cout << "Yes";}else{if(b+s > a){cout << "No";}else cout << "Yes";}return 0;}
B
link
我并没有看下面讲解只看了描述(竖线中的)
略一看样例便可知道,是一列一列从下往上输出,对于一列,如果这个位置有字符,输出,否则,如果后面(也就是上面)还有字符,输出一个*
,否则break
。
那么我们可以存一下每一列最靠后的字符(也就是最靠上的字符),如果超出了这个,就结束。
别忘了存一下最大长度。
神奇的代码
#include<bits/stdc++.h>using namespace std;int n;
string s[105];
int w[105],mx;signed main(){cin >> n;for(int i = 1;i <= n;++ i){cin >> s[i];int sn = s[i].length();if(sn > mx) mx = sn;for(int j = 0;j < s[i].length();++ j)w[j] = (w[j] == 0)?i:w[j];}for(int i = 0;i < mx;++ i){for(int j = n;j >= 1&&j >= w[i];-- j){int sn = s[j].length();if(sn <= i) cout << '*';else cout << s[j][i];}cout << endl;}return 0;}
C
link
我觉得C<B
开一个桶,如果是一个新的,个数加一,如果减没了,个数减一。
神奇的代码
#include<bits/stdc++.h>using namespace std;int q;
int x,tp;
int bucket[1000005],sum;signed main(){cin >> q;for(int i = 1;i <= q;++ i){cin >> tp;if(tp == 1){cin >> x;bucket[x]++;if(bucket[x] == 1) sum++;}else if(tp == 2){cin >> x;bucket[x]--;if(bucket[x] == 0) sum--;}else cout << sum << endl;}return 0;}
D
link
三维前缀和。这里提供两种思考方式。
直接想三维前缀和
考虑类比二位前缀和的容斥原理,脑补一下,反正我没脑补出来图,奇加偶减(具体可以学习一下容斥原理),那么就有\(qzh_{i,j,k}=qzh_{i-1,j,k}+qzh_{i,j-1,k}+qzh_{i,j,k-1}-qzh_{i-1,j-1,k}-qzh_{i-1,j,k-1}-qzh_{i,j-1,k-1}+qzh_{i-1,j-1,k-1}+a_{i,j,k}\),查询也是类似的(详见代码)。
神奇的代码
#include<bits/stdc++.h>using namespace std;int n;
int q;
int a[105][105][105];
int qzh[105][105][105];signed main(){cin >> n;for(int i = 1;i <= n;++ i)for(int j = 1;j <= n;++ j)for(int k = 1;k <= n;++ k){cin >> a[i][j][k];qzh[i][j][k] = qzh[i-1][j][k]+qzh[i][j-1][k];qzh[i][j][k] += qzh[i][j][k-1];qzh[i][j][k] -= qzh[i-1][j-1][k];qzh[i][j][k] -= qzh[i-1][j][k-1];qzh[i][j][k] -= qzh[i][j-1][k-1];qzh[i][j][k] += qzh[i-1][j-1][k-1]+a[i][j][k];}cin >> q;while(q--){int li,ri,lj,rj,lk,rk;cin >> li >> ri >> lj >> rj >> lk >> rk;int ans = qzh[ri][rj][rk];ans -= qzh[li-1][rj][rk];ans -= qzh[ri][lj-1][rk];ans -= qzh[ri][rj][lk-1];ans += qzh[li-1][lj-1][rk];ans += qzh[li-1][rj][lk-1];ans += qzh[ri][lj-1][lk-1];ans -= qzh[li-1][lj-1][lk-1];cout << ans << endl;}return 0;}