• Codeforces Round #373 (Div. 2)


    岑寂了一个暑假之后终于涨分了,借助了A题的hack大法, c题没有理解好题意,wa就放弃了,后来再样例的帮助下。。终于AC

    现在还没搞懂矩阵啊。烦。。抄来别人的代码

    A. Vitya in the Countryside
    当n = 1时候特判0,15
     1 #include <iostream>
     2 #include <cstdio>
     3 
     4 using namespace std;
     5 int main() {
     6     int n, m;
     7     int a[100];
     8     scanf("%d", &n);
     9     for(int i = 0;i < n; i++){
    10         scanf("%d", &a[i]);
    11     }
    12     if(a[n-1] == 15) printf("DOWN
    ");
    13     else if(a[n-1] == 0) printf("UP
    ");
    14     else if(n == 1) printf("-1
    ");
    15     else if(a[n-1] < a[n-2]){
    16         printf("DOWN
    ");
    17     }else printf("UP
    ");
    18     return 0;
    19 }

    B. Anatoly and Cockroaches

    分别计算奇偶位r、b的个数,求一下就好

     1 #include <iostream>
     2 #include <cstdio>
     3 
     4 using namespace std;
     5 int main() {
     6     int n, m;
     7     char s[100002];
     8     scanf("%d", &n);
     9     scanf("%s", s);
    10     int first_r = 0, first_b = 0, second_r = 0, second_b = 0;
    11     for(int i = 0; i < n; i++){
    12         if(i%2 == 0) {
    13             if(s[i] == 'r') first_r++;
    14             else first_b++;
    15         }else {
    16             if(s[i] == 'b') second_b++;
    17             else second_r++;
    18         }
    19     }
    20     //printf("%d %d %d %d
    ", first_r, first_b, second_r, second_b);
    21     int ans1 = first_b + second_r - min(first_b, second_r);
    22     int ans2 = first_r + second_b - min(first_r, second_b);
    23     printf("%d
    ", min(ans1, ans2));
    24     return 0;
    25 }

    C. Efim and Strange Grade

    搞得我也很恶心了, 分类讨论各个情况

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 using namespace std;
     5 int main() {
     6     int n, m;
     7     scanf("%d%d", &n, &m);
     8     char s[200005];
     9     scanf("%s", s);
    10     int flag = 0, flags = 1;
    11     int ans = -1;
    12     for(int i = 0; i < n; i++) {
    13         if(s[i] == '.') {
    14             flag = 1;
    15             continue;
    16         }
    17         if(s[i] - '0' >= 5 && flag == 1 && m > 0) {
    18             ans = i;
    19             m--;
    20             break;
    21         }
    22     }
    23     if(ans == -1) printf("%s
    ", s);
    24     else {
    25         int snow = 1;
    26         if(s[ans-1] == '.') ans--, flags = 0;
    27         for(int i = ans-1; i >= 0; i--) {
    28             if(s[i] == '.') continue;
    29             int sum = s[i] - '0' + snow;
    30             s[i] = sum%10 + '0';
    31             snow = sum/10;
    32         }
    33         if(snow == 1) {
    34             printf("1");
    35             for(int i = 0; i < ans; i++) printf("%c", s[i]);
    36             printf("
    ");
    37         } else {
    38             int last = ans, now = 0;
    39             for(int i = last-1; i >= 0; i--) {
    40                 if(s[i] == '.') {
    41                     flags = 0;
    42                     ans = i-1;
    43                     continue;
    44                 }
    45                 int sum = s[i] - '0' + now;
    46                // printf("%d %d %d %d
    ", i, now, sum, flags);
    47                 if((sum <= 4 || m <=  0) && flags) {
    48                     now = 0;
    49                     s[i] = sum + '0';
    50                     ans = i;
    51                     break;
    52                 } else if(flags) {
    53                     m--;
    54                     now = 1;
    55                     ans--;
    56                 } else {
    57                     s[i] = sum%10 + '0';
    58                     now = sum /10;
    59                 }
    60             }
    61             if(now == 1) {
    62                 printf("1");
    63                 for(int i = 0; i <= ans; i++) printf("%c", s[i]);
    64                 printf("
    ");
    65             }
    66             else {
    67             if(s[ans] < '0'  || s[ans] > '9') ans--;
    68             for(int i = 0; i <= ans; i++) printf("%c", s[i]);
    69             printf("
    ");
    70             }
    71         }
    72     }
    73     return 0;
    74 }

    E. Sasha and Array(抄的代码)

      1 #include<cstdio>
      2 using namespace std;
      3 typedef long long LL;
      4 const int N = 100010;
      5 const int P = 1000000007;
      6 
      7 struct Matrix {
      8     int n,m;
      9     LL c[3][3];
     10     Matrix() {
     11         for(int i=0; i<2; i++)for(int j=0; j<2; j++)c[i][j]=0;
     12         n=m=0;
     13         return;
     14     }
     15     Matrix operator * (const Matrix & a) const {
     16         Matrix b;
     17         b.n=n;
     18         b.m=a.m;
     19         for(int i=0; i<n; i++)
     20             for(int j=0; j<b.m; j++) {
     21                 for(int k=0; k<m; k++)
     22                     b.c[i][j]=(b.c[i][j]+c[i][k]*a.c[k][j])%P;
     23             }
     24         return b;
     25     }
     26     Matrix operator + (const Matrix & a) const {
     27         Matrix b;
     28         b.n=n;
     29         b.m=m;
     30         for(int i=0; i<n; i++)
     31             for(int j=0; j<m; j++)
     32                 b.c[i][j]=(a.c[i][j]+c[i][j])%P;
     33         return b;
     34     }
     35 } o,ini,oo,T[N<<2],tag[N<<2];
     36 
     37 Matrix FP(Matrix a,int x) {
     38     oo=o;
     39     for(; x; x>>=1,oo=oo*oo)
     40         if(x&1) a=a*oo;
     41     return a;
     42 }
     43 
     44 int n,m,seq[N];
     45 
     46 void Build(int x,int l,int r) {
     47     T[x].n=1,T[x].m=2;
     48     if(l==r) {
     49         tag[x].n=tag[x].m=0;
     50         T[x]=ini;
     51         T[x]=FP(T[x],seq[l]-1);
     52         return;
     53     }
     54     int mid=(l+r)>>1;
     55     Build(x<<1,l,mid);
     56     Build(x<<1|1,mid+1,r);
     57     T[x]=T[x<<1]+T[x<<1|1];
     58     return;
     59 }
     60 
     61 void Pushdown(int x) {
     62     if(tag[x].n==0) return;
     63     T[x<<1]=T[x<<1]*tag[x];
     64     if(tag[x<<1].n==0) tag[x<<1]=tag[x];
     65     else tag[x<<1]=tag[x<<1]*tag[x];
     66     T[x<<1|1]=T[x<<1|1]*tag[x];
     67     if(tag[x<<1|1].n==0) tag[x<<1|1]=tag[x];
     68     else tag[x<<1|1]=tag[x<<1|1]*tag[x];
     69     tag[x].n=tag[x].m=0;
     70     return;
     71 }
     72 
     73 void Change(int x,int l,int r,int L,int R,Matrix d) {
     74     if(L<=l&&r<=R) {
     75         if(tag[x].n==0) tag[x]=d;
     76         else tag[x]=tag[x]*d;
     77         T[x]=T[x]*d;
     78         return;
     79     }
     80     Pushdown(x);
     81     int mid=(l+r)>>1;
     82     if(L<=mid) Change(x<<1,l,mid,L,R,d);
     83     if(R>mid) Change(x<<1|1,mid+1,r,L,R,d);
     84     T[x]=T[x<<1]+T[x<<1|1];
     85     return;
     86 }
     87 
     88 LL Query(int x,int l,int r,int L,int R) {
     89     if(L<=l&&r<=R) return T[x].c[0][1];
     90     Pushdown(x);
     91     int mid=(l+r)>>1;
     92     LL res=0;
     93     if(L<=mid) res+=Query(x<<1,l,mid,L,R);
     94     if(R>mid) res+=Query(x<<1|1,mid+1,r,L,R);
     95     res%=P;
     96     return res;
     97 }
     98 
     99 int main() {
    100     ini.n=1;
    101     ini.m=2;
    102     ini.c[0][1]=1ll;
    103     o.n=2,o.m=2;
    104     o.c[1][0]=1ll;
    105     o.c[0][1]=1ll;
    106     o.c[1][1]=1ll;
    107 
    108     scanf("%d%d",&n,&m);
    109     for(int i=1; i<=n; i++) scanf("%d",&seq[i]);
    110     Build(1,1,n);
    111 
    112     int typ,l,r,x;
    113     for(int i=1; i<=m; i++) {
    114         scanf("%d%d%d",&typ,&l,&r);
    115         if(typ==2) printf("%I64d
    ",Query(1,1,n,l,r));
    116         else {
    117             scanf("%d",&x);
    118             Change(1,1,n,l,r,FP(o,x-1));
    119         }
    120     }
    121     return 0;
    122 }
     
  • 相关阅读:
    js中Frame框架的属性获取(1)
    c#中文件上传(1)
    表单验证Validform
    Mybatis语法笔记
    js的checkbox
    调用微信Js-SDK支付
    调用微信Js-SDK图片
    java后台上传到linux
    web服务器内层溢出
    SpringMVC
  • 原文地址:https://www.cnblogs.com/cshg/p/5903241.html
Copyright © 2020-2023  润新知