但是我还是厚脸皮的贴出前两题代码。。。
明天去找大神博客膜拜后面几题吧。。。
A
水!题目看了挺长时间,一开始还以为是并查集,想了15分钟后发现数据很小,暴力n^2能过。
于是暴力水果了。
#include <cstdio> #define maxn 1010 int main() { // freopen("in", "r", stdin); bool t[maxn] = {0}; int c[maxn][2]; int n, cnt = 0; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d%d", &c[i][0], &c[i][1]); for (int i = 0; i < n; i++) for (int j = 0; j <= n; j++) { if (i == j) continue; if (c[i][1] == c[j][0]) //暴力标记能开的瓶子 t[j] = true; } for (int i = 0; i < n; i++) if (t[i]) cnt++; printf("%d\n", n - cnt); return 0; }
B
同水!
感觉很像C基础入门那种书里面的题目。。。
照着写了交上去在第11个测试点上面卡住了,目测是某位大神提交的测试点吧。。。
于是搞了个变化数而不是遍历去修改数组,水果了。。。
#include <cstdio> #define maxn 100010 int main() { // freopen("in", "r", stdin); int n, m; long a[maxn], change = 0; //change就是变化量 scanf("%d%d", &n, &m); int op; for (int i = 0; i < n; i++) scanf("%ld", &a[i]); while (m--) { scanf("%d", &op); if (op == 1) { int v, x; scanf("%d%d", &v, &x); a[v-1] = x - change; } else if (op == 2) { long tmp; scanf("%ld", &tmp); change += tmp; } else { int tmp; scanf("%d", &tmp); printf("%ld\n", a[tmp-1] + change); } } return 0; }
其他题亚历山大,我还修行不够。。。坐等大神题解。。。