• Codeforces Round #197 (Div. 2)


    这次题有点水 涨了不少

    A题 转成数字 排下序就好

    B题 直接模拟

    C题 dfs

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<stdlib.h>
     6 using namespace std;
     7 #define N 1010
     8 char s[12];
     9 int a[12],o,m,k[1010],flag;
    10 void dfs(int pre,int s1,int s2,int v)
    11 {
    12     int i;
    13     if(flag)
    14     return ;
    15     if(v)
    16     k[v] = pre;
    17     if(v==m)
    18     {
    19         flag = 1;
    20         puts("YES");
    21         for(i = 1; i < m ; i++)
    22         printf("%d ",k[i]);
    23         printf("%d
    ",k[m]);
    24         return ;
    25     }
    26     for(i = 1; i <= o ; i++)
    27     {
    28         if(a[i]!=pre&&(a[i]+s1)>s2)
    29         {
    30 
    31             dfs(a[i],s2,a[i]+s1,v+1);
    32         }
    33     }
    34 }
    35 int main()
    36 {
    37     int i;
    38     cin>>s;
    39     cin>>m;
    40     for(i = 0 ; i < 10 ; i++)
    41     {
    42         if(s[i]=='1')
    43         {
    44             o++;
    45             a[o] = i+1;
    46         }
    47     }
    48     dfs(-1,0,0,0);
    49     if(!flag)
    50     puts("NO");
    51     return 0;
    52 }
    View Code

    D题 裸线段树

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<stdlib.h>
     6 using namespace std;
     7 #define N 150010
     8 #define LL __int64
     9 LL s[N<<2],pp[N<<2],b,q[N];
    10 int n,p;
    11 int o;
    12 void up(int w)
    13 {
    14     if(s[w]%2==o)
    15     {
    16         pp[w] = pp[w<<1]|pp[w<<1|1];
    17     }
    18     else
    19     {
    20         pp[w] = pp[w<<1]^pp[w<<1|1];
    21     }
    22 
    23 }
    24 void build(int l,int r,int w,int v)
    25 {
    26     s[w] = v;
    27     if(l==r)
    28     {
    29         pp[w] = q[l];
    30         return ;
    31     }
    32     int m = (l+r)>>1;
    33     build(l,m,w<<1,v+1);
    34     build(m+1,r,w<<1|1,v+1);
    35     up(w);
    36 }
    37 void update(int p,LL d,int l,int r,int w)
    38 {
    39     if(l==r)
    40     {
    41         pp[w] = d;
    42         return ;
    43     }
    44     int m = (l+r)>>1;
    45     if(p<=m)
    46     update(p,d,l,m,w<<1);
    47     else
    48     update(p,d,m+1,r,w<<1|1);
    49     up(w);
    50 }
    51 int main()
    52 {
    53     int m,i;
    54     scanf("%d%d",&n,&m);
    55     o = n%2;
    56     n = 1<<n;
    57     for(i = 1; i <= n ; i++)
    58     scanf("%I64d",&q[i]);
    59     build(1,n,1,1);
    60     for(i = 1; i <= m ; i++)
    61     {
    62         scanf("%d%I64d",&p,&b);
    63         update(p,b,1,n,1);
    64         printf("%I64d
    ",pp[1]);
    65     }
    66     return 0;
    67 }
    View Code
  • 相关阅读:
    Linux 常见命令使用
    Spring Cloud学习03--OpenFeign基本使用
    Spring Cloud学习02--Ribbon基本使用
    Spring Cloud学习01--Eureka基本使用
    两个都不可对角化的矩阵判断相似
    利用相似转化研究对象
    分段函数的应用
    0820. Short Encoding of Words (M)
    0637. Average of Levels in Binary Tree (E)
    0160. Intersection of Two Linked Lists (E)
  • 原文地址:https://www.cnblogs.com/shangyu/p/3284871.html
Copyright © 2020-2023  润新知