第二周 3.6-3.12
Posted Algorithms Crush Me
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二周 3.6-3.12相关的知识,希望对你有一定的参考价值。
3.6
CF 627 A XOR Equation
a + b = a ^ b + (a & b << 1)
注意非法情况和0。
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 typedef long long LL; 5 6 int main(void) 7 { 8 LL s, x, t, ans = 1LL; 9 cin >> s >> x; 10 t = s == x ? 2LL : 0LL; 11 s -= x; 12 if(s < 0LL || s % 2LL) {puts("0"); return 0;} 13 s /= 2LL; 14 while(x || s) 15 { 16 if((x % 2LL) && (s % 2LL)) {puts("0"); return 0;} 17 if((x % 2LL) && !(s % 2LL)) ans <<= 1LL; 18 x /= 2LL, s /= 2LL; 19 } 20 cout << ans - t << endl; 21 return 0; 22 }
CF 627 B Factory Repairs
两个bit随意搞。
1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 using namespace std; 5 const int maxn = 2e5 + 10; 6 typedef long long LL; 7 LL c[2][maxn]; 8 9 int lowbit(int s) 10 { 11 return s & (-s); 12 } 13 14 void modify(int op, int i, LL x) 15 { 16 while(i < maxn) c[op][i] += x, i += lowbit(i); 17 return; 18 } 19 20 LL query(int op, int i) 21 { 22 LL ret = 0LL; 23 while(i > 0) ret += c[op][i], i -= lowbit(i); 24 return ret; 25 } 26 27 int main(void) 28 { 29 int n, k, a, b, q; 30 scanf("%d %d %d %d %d", &n, &k, &a, &b, &q); 31 while(q--) 32 { 33 int op, x, y; 34 scanf("%d", &op); 35 if(op == 1) 36 { 37 scanf("%d %d", &x, &y); 38 modify(0, x, min(a - query(0, x) + query(0, x - 1), (LL)y)); 39 modify(1, x, min(b - query(1, x) + query(1, x - 1), (LL)y)); 40 } 41 else 42 { 43 scanf("%d", &x); 44 printf("%I64d\n", query(1, x - 1) + query(0, n) - query(0, x + k - 1)); 45 } 46 } 47 return 0; 48 }
以上是关于第二周 3.6-3.12的主要内容,如果未能解决你的问题,请参考以下文章