• 日常训练17-10-21(16大连现场赛)


    题目链接:here

    Convex

    HDU - 5979

    可能是最水的一道题了,用了很麻烦的做法.....

    Find Small A

    HDU - 5980
    签到题
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 #define LL long long 
     4 int main(){
     5     int n;
     6     //freopen("in.txt", "r", stdin);
     7     while(scanf("%d", &n) != EOF){
     8         int cnt = 0;
     9         LL x;
    10         for(int i = 0; i < n; i++){
    11             scanf("%lld", &x);
    12             int pos = 0;
    13             while(x){ 
    14                 int temp = x & 255;
    15                 x >>= 8;
    16                 if(temp == 97) cnt++;
    17             }
    18         }
    19         printf("%d
    ", cnt);
    20     }
    21 }
    View Code

    To begin or not to begin

    HDU - 5978

    发现真的很简单啊......

    学过概率的就知道这种事情如果每个人只取一次,先后手对结果没有影响,那么只要看谁能取的次数多就好了

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 int main(){
     5     int n;
     6     while(scanf("%d", &n) != EOF){
     7         if(n&1){
     8             puts("0");
     9         }else {
    10             puts("1");
    11         }
    12     }
    13 }
    View Code

    Wrestling Match

    HDU - 5971

    二分图染色,感觉题意不是很清楚,一开始没敢写...

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 const int maxv = 1010;
     5 const int maxe = 10010;
     6 
     7 struct Edge{
     8     int v, nex;
     9     Edge(int v = 0, int nex = 0) : v(v), nex(nex) {}
    10 }e[maxe<<1];
    11 int head[maxv];
    12 int cnt;
    13 
    14 void init(){
    15     memset(head, -1, sizeof(head));
    16     cnt = 0;
    17 }
    18 void add(int u, int v){
    19     e[cnt] = Edge(v, head[u]);
    20     head[u] = cnt++;
    21     e[cnt] = Edge(u, head[v]);
    22     head[v] = cnt++;
    23 }
    24 int color[maxv];
    25 
    26 bool Bigraph(int u){
    27     for(int i = head[u]; ~i; i = e[i].nex){
    28         int v = e[i].v;
    29         if(color[v] == color[u]) return 0;
    30         if(!color[v]){
    31             color[v] = 3 - color[u];
    32             if(!Bigraph(v)) return 0;
    33         }
    34     }
    35     return 1;
    36 }
    37 
    38 int main(){
    39     int n, m , x, y;
    40     //freopen("in.txt", "r", stdin);
    41     while(scanf("%d %d %d %d", &n, &m, &x, &y) != EOF) {
    42         int u, v;
    43         init();
    44         memset(color, 0, sizeof(color));
    45         for(int i = 0; i < m; i++){
    46             scanf("%d %d", &u, &v);
    47             add(u, v);
    48         }
    49         for(int i = 0; i < x; i++){
    50             scanf("%d", &u);
    51             color[u] = 1;
    52         }
    53         for(int i = 0; i < y; i++){
    54             scanf("%d", &v);
    55             color[v] = 2;
    56         }
    57         int ok = 1;
    58         for(int u = 1; u <= n; u++){
    59             if(color[u]) {
    60                 if(!Bigraph(u)) {
    61                     ok = 0;
    62                     break;
    63                 }
    64             }
    65         }
    66         for(int i = 1; ok && i <= n; i++){
    67             if(!color[i]){
    68                 if(head[i] == -1) {
    69                     ok = 0;
    70                     break;
    71                 } else {
    72                     color[i] = 1;
    73                     if(!Bigraph(i)) {
    74                         ok = 0;
    75                         break;
    76                     }
    77                 }
    78             }
    79         }
    80         if(ok) puts("YES");
    81         else puts("NO");
    82     }
    83 }
    View Code

    Detachment

    HDU - 5976

    队友过的~

    首先要清楚的是分成的肯定是2到x的一个公差为1的等差数列,然后多出来的加到后面就可以了

    A Simple Math Problem

    HDU - 5974

    也是队友过的,不过队友好像是枚举了a的因子做的.

    发现正解很巧妙的用到了数论的知识

    Regular Number

    HDU - 5972

    这个题...对于我们来说好像不可做,一是自己没用过bitset,二是从来没见过这种匹配算法Shift-And

    感觉很不错,学习下~

    bitset基本操作(转自here)

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int maxn = 5e6+10;
     4 bitset<1010> B[11], ans;
     5 char s[maxn];
     6 int main(){
     7     int n;
     8     //freopen("in.txt", "r", stdin);
     9    // for(int i = 0 ; i < 11; i++) B[i].reset();
    10    // ans.reset();
    11     scanf("%d", &n);
    12     for(int i = 0; i < n; i++){
    13         int m, x;
    14         scanf("%d", &m);
    15         for(int j = 0; j < m; j++) {
    16             scanf("%d", &x);
    17             B[x].set(i);
    18         }
    19     }
    20     scanf("%s", s);
    21     int len = strlen(s);
    22     for(int i = 0; i < len; i++){
    23         ans <<= 1;
    24         ans[0] = 1;
    25         ans &= B[s[i] - '0'];
    26         if(ans[n-1] == 1) {
    27             char c = s[i+1];
    28             s[i+1] = 0;
    29             puts(&s[i-n+1]);
    30             s[i+1] = c;
    31         }
    32     }
    33     return 0;
    34 }
    View Code
  • 相关阅读:
    无线渗透开启WPS功能的路由器
    写代码怎能不会这些Linux命令?
    分布式服务框架 Zookeeper -- 管理分布式环境中的数据
    每天进步一点点——五分钟理解一致性哈希算法(consistent hashing)
    Innodb 中的事务隔离级别和锁的关系
    线上操作与线上问题排查实战
    MySQL 四种事务隔离级的说明
    一次由于 MTU 设置不当导致的网络访问超时
    SYN 和 RTO
    The story of one latency spike
  • 原文地址:https://www.cnblogs.com/yijiull/p/7705551.html
Copyright © 2020-2023  润新知