• 第二周 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 }
    Aguin

    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
    ", query(1, x - 1) + query(0, n) - query(0, x + k - 1));
    45         }
    46     }
    47     return 0;
    48 }
    Aguin

    CF 627 C Package Delivery

    不是很懂贪心。

    想起多校某题还不会QAQ。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <queue>
     4 #include <algorithm>
     5 using namespace std;
     6 typedef long long LL;
     7 const int maxn = 2e5 + 10;
     8 
     9 struct gas
    10 {
    11     int id, x, p;
    12     friend bool operator < (gas A, gas B)
    13     {
    14         return A.p > B.p;
    15     }
    16 }g[maxn];
    17 
    18 bool cmp (gas A, gas B)
    19 {
    20     return A.x < B.x;
    21 }
    22 
    23 int main(void)
    24 {
    25     int n, d, m;
    26     scanf("%d %d %d", &d, &n, &m);
    27     for(int i = 0; i < m; i++) scanf("%d %d", &g[i].x, &g[i].p);
    28     sort(g, g + m, cmp);
    29     LL ans = 0LL;
    30     priority_queue<gas> pq;
    31     int t = 0, now = n;
    32     while(now < d)
    33     {
    34         while(t < m && g[t].x <= now) pq.push(g[t++]);
    35         while(!pq.empty() && pq.top().x <= now - n) pq.pop();
    36         if(pq.empty()) return puts("-1");
    37         int x = pq.top().x, p = pq.top().p;
    38         int nxt = min(d, x + n);
    39         if(t < m && nxt >= g[t].x) nxt = g[t].x;
    40         ans += (LL) p * (nxt - now);
    41         now = nxt;
    42     }
    43     printf("%I64d
    ", ans);
    44     return 0;
    45 }
    Aguin

    3.7

    CF 627 D Preorder Test

    卡题了……崩溃。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 using namespace std;
     6 const int maxn = 2e5 + 10;
     7 int n, k, a[maxn];
     8 
     9 //tree
    10 int cnt, h[maxn];
    11 struct edge
    12 {
    13     int fm, to, pre;
    14 } e[maxn<<1];
    15 
    16 void add(int from, int to)
    17 {
    18     cnt++;
    19     e[cnt].pre = h[from];
    20     e[cnt].fm = from;
    21     e[cnt].to = to;
    22     h[from] = cnt;
    23 }
    24 
    25 //dp
    26 int sz[maxn], num[maxn];
    27 void dfs1(int mid, int v, int f)
    28 {
    29     sz[v] = 1;
    30     num[v] = a[v] >= mid ? 1 : 0;
    31     for(int i = h[v]; i; i = e[i].pre)
    32     {
    33         int to = e[i].to;
    34         if(to == f) continue;
    35         dfs1(mid, to, v);
    36         sz[v] += sz[to];
    37         num[v] += num[to];
    38     }
    39 }
    40 
    41 int ff[maxn], m[2][maxn], pre[maxn];
    42 void dfs2(int mid, int v, int f)
    43 {
    44     if(!f) ff[v] = a[v] >= mid ? 1 : 0;
    45     pre[v] = m[0][v] = m[1][v] = 0;
    46     for(int i = h[v]; i; i = e[i].pre)
    47     {
    48         int to = e[i].to;
    49         if(to == f) continue;
    50         if(num[v] - num[to] == sz[v] - sz[to] && ff[v]) ff[to] = 1;
    51         else ff[to] = 0;
    52         dfs2(mid, to, v);
    53         if(a[to] < mid) continue;
    54         if(sz[to] == num[to]) pre[v] += sz[to];
    55         else
    56         {
    57             if(pre[to] > m[0][v]) m[1][v] = m[0][v], m[0][v] = pre[to];
    58             else if(pre[to] > m[1][v]) m[1][v] = pre[to];
    59         }
    60     }
    61     if(a[v] < mid) pre[v] = 0;
    62     else pre[v] += m[0][v] + 1;
    63 }
    64 
    65 bool ok(int mid)
    66 {
    67     dfs1(mid, 1, 0);
    68     dfs2(mid, 1, 0);
    69     for(int i = 1; i <= n; i++)
    70     {
    71         if(a[i] < mid) continue;
    72         int tmp = pre[i] + m[1][i];
    73         if(ff[i]) tmp += n - sz[i];
    74         if(tmp >= k) return true;
    75     }
    76     return false;
    77 }
    78 
    79 int main(void)
    80 {
    81     scanf("%d %d", &n, &k);
    82     for(int i = 1; i <= n; i++) scanf("%d", a + i);
    83     for(int i = 1; i < n; i++)
    84     {
    85         int u, v;
    86         scanf("%d %d", &u, &v);
    87         add(u, v), add(v, u);
    88     }
    89     int l = 1, r = 1e6, mid;
    90     while(l < r)
    91     {
    92         mid = r - (r - l) / 2;
    93         if(ok(mid)) l = mid;
    94         else r = mid - 1;
    95     }
    96     printf("%d
    ", l);
    97     return 0;
    98 }
    Aguin

    3.8

    什么都没干。

    3.9 

    CF 627 E Orchestra

    感觉很少写链表。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 using namespace std;
     6 typedef long long LL;
     7 int r, c, n, k, id[3333];
     8 
     9 struct vio
    10 {
    11     int id, x, y;
    12 }v[3333], cpy[3333];
    13 
    14 bool cmp1(vio A, vio B)
    15 {
    16     return A.x < B.x;
    17 }
    18 
    19 bool cmp2(vio A, vio B)
    20 {
    21     return A.y < B.y;
    22 }
    23 
    24 struct node
    25 {
    26     int y;
    27     int pre, nxt;
    28 }l[3333];
    29 
    30 LL cal(int i, int k)
    31 {
    32     LL ret = 0LL;
    33     int p1 = i, p2 = i, t = 0;
    34     while(l[p1].pre && t < k - 1) p1 = l[p1].pre, t++;
    35     while(l[p2].nxt && t < k - 1) p2 = l[p2].nxt, t++;
    36     if(t < k - 1) return ret;
    37     while(1)
    38     {
    39         if(l[p2].nxt) ret += (LL) (l[p1].y - l[l[p1].pre].y) * (l[l[p2].nxt].y - l[p2].y);
    40         else ret += (LL) (l[p1].y - l[l[p1].pre].y) * (c + 1 - l[p2].y);
    41         if(p1 == i || !l[p2].nxt) break;
    42         p1 = l[p1].nxt;
    43         p2 = l[p2].nxt;
    44     }
    45     return ret;
    46 }
    47 
    48 void del(int i)
    49 {
    50     if(l[i].pre) l[l[i].pre].nxt = l[i].nxt;
    51     if(l[i].nxt) l[l[i].nxt].pre = l[i].pre;
    52 }
    53 
    54 int main(void)
    55 {
    56     scanf("%d %d %d %d", &r, &c, &n, &k);
    57     for(int i = 0; i < n; i++) scanf("%d %d", &v[i].x, &v[i].y);
    58     sort(v, v + n, cmp1);
    59     for(int i = 0; i < n; i++) v[i].id = i;
    60     memcpy(cpy, v, sizeof(cpy));
    61     LL ans = 0LL;
    62     for(int x1 = r; x1; x1--)
    63     {
    64         int cnt = 0;
    65         LL cur = 0LL;
    66         for(int i = 0; i < n; i++)
    67         {
    68             if(v[i].x < x1) continue;
    69             sort(cpy + i, cpy + n, cmp2);
    70             for(int j = i; j < n; j++)
    71             {
    72                 cnt++;
    73                 l[cnt].y = cpy[j].y;
    74                 l[cnt].pre = cnt - 1;
    75                 if(cnt - 1) l[cnt-1].nxt = cnt;
    76                 l[cnt].nxt = 0;
    77                 id[cpy[j].id] = cnt;
    78             }
    79             break;
    80         }
    81         for(int i = 1; i + k - 1 <= cnt; i++)
    82             cur += (LL) (l[i].y - l[i-1].y) * (c - l[i+k-1].y + 1);
    83         int p = n - 1;
    84         for(int x2 = r; x2 >= x1; x2--)
    85         {
    86             ans += cur;
    87             while(p >= 0 && v[p].x == x2)
    88             {
    89                 cur -= cal(id[p],k);
    90                 del(id[p]);
    91                 p--;
    92             }
    93         }
    94     }
    95     printf("%I64d
    ", ans);
    96     return 0;
    97 }
    Aguin

    3.10-3.12

    什么都没干。

  • 相关阅读:
    C#:新邮件监听及搜索
    PHPexcel导入数据的时候出现object解决方法
    selectpage选择订单的时候,订单数量和金额会动态改变
    三、变量的简述
    TP框架where条件和whereOr条件同时使用
    一.OS运行机制
    二.进制简述
    1.go语言入门
    C# Redis学习系列二:Redis基本设置
    C# Redis学习系列一:Redis的认识、下载、安装、使用
  • 原文地址:https://www.cnblogs.com/Aguin/p/5247496.html
Copyright © 2020-2023  润新知