zoukankan      html  css  js  c++  java
  • Codeforces Round #365 (Div. 2)

      A题,水题。

      B题,题意挺简单的,但是要仔细。

      C题,以前做过一次,不过这次还是不会= =。具体方法见代码:

     1 #include <stdio.h>
     2 #include <algorithm>
     3 #include <string.h>
     4 #include <iostream>
     5 #include <vector>
     6 using namespace std;
     7 const int N = 100000 + 5;
     8 typedef long long ll;
     9 
    10 int n,w,v,u;
    11 
    12 int main()
    13 {
    14     cin >> n >> w >> v >> u;
    15     int flag1 = 1, flag2 = 1;
    16     double ans = 0.0;
    17     for(int i=1;i<=n;i++)
    18     {
    19         double x,y;
    20         cin >> x >> y;
    21         if(x / v > y / u) flag1 = 0;
    22         if(x / v < y / u) flag2 = 0;
    23         ans = max(ans, x / v + (w-y) / u);
    24     }
    25     if(flag1 || flag2) printf("%.15f
    ",(double)w / u);
    26     else printf("%.15f
    ",ans);
    27     return 0;
    28 }
    C

      D题,好题。求区间内出现偶数次数字的异或和。奇数次的话好做,前缀和一下即可。那么现在如果知道了出现过的数字的异或和,那么很显然前两者异或一下就是答案了。那么怎么求出现过的数字的异或和呢?这里的方法是离线+树状数组。每次需要记录a[i]这个数字上一次出现在哪里,把上一次出现的数字拿掉再在当前位置放上这个数字,再做区间求和即可。具体见代码:

     1 #include <stdio.h>
     2 #include <algorithm>
     3 #include <string.h>
     4 #include <iostream>
     5 #include <vector>
     6 #include <map>
     7 using namespace std;
     8 const int N = 1000000 + 5;
     9 typedef long long ll;
    10 typedef pair<int,int> pii;
    11 
    12 int c[N];
    13 int a[N],n,m;
    14 vector<pii> query[N];
    15 int ans[N];
    16 int pre[N];
    17 int lowbit(int x) {return x & (-x);}
    18 int add(int x,int val)
    19 {
    20     for(int i=x;i<=n;i+=lowbit(i)) c[i] ^= val;
    21 }
    22 int get(int x)
    23 {
    24     int ans = 0;
    25     for(int i=x;i;i-=lowbit(i)) ans ^= c[i];
    26     return ans;
    27 }
    28 
    29 int main()
    30 {
    31     cin >> n;
    32     for(int i=1;i<=n;i++) scanf("%d",&a[i]),pre[i] = pre[i-1] ^ a[i];
    33     cin >> m;
    34     for(int i=1;i<=m;i++)
    35     {
    36         int l,r;
    37         scanf("%d%d",&l,&r);
    38         query[r].push_back(pii(l,i));
    39     }
    40     map<int,int> pos;
    41     for(int i=1;i<=n;i++)
    42     {
    43         if(pos[a[i]]) add(pos[a[i]],a[i]);
    44         add(i,a[i]);
    45         pos[a[i]] = i;
    46         for(int j=0;j<query[i].size();j++)
    47         {
    48             pii Q = query[i][j];
    49             int L = Q.first, R = i;
    50             int id = Q.second;
    51             ans[id] = pre[R] ^ pre[L-1] ^ get(R) ^ get(L-1);
    52         }
    53     }
    54     for(int i=1;i<=m;i++) printf("%d
    ",ans[i]);
    55     return 0;
    56 }
    D
  • 相关阅读:
    11
    不错的Spring学习笔记(转)
    面相对象
    Shiro框架学习
    浅谈重载与重写
    二叉树的Java实现及特点总结
    Spring注解及作用
    java中String与StringBuilder的区别
    Java String, StringBuffer和StringBuilder实例
    Docker Mysql主从同步配置搭建
  • 原文地址:https://www.cnblogs.com/zzyDS/p/6390716.html
Copyright © 2011-2022 走看看