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

    A 模拟

     1 #include <cstdio>
     2 #include <cstring>
     3 int Ans;
     4 char Str[110];
     5 inline int Abs(int x) {return x>0?x:-x;}
     6 inline int Min(int x,int y) {return x>y?y:x;}
     7 int main()
     8 {
     9     char u='a'; Ans=0;
    10     scanf("%s",Str+1);
    11     for (int i=1;i<=strlen(Str+1);i++)
    12         Ans+=Min(Abs(Str[i]-u),26-Abs(Str[i]-u)),u=Str[i];
    13     printf("%d
    ",Ans);
    14     return 0;
    15 }
    A

    B 贪心

     1 #include <cstdio>
     2 int n,a[200100];
     3 bool Flag;
     4 int main()
     5 {
     6     scanf("%d",&n); Flag=true;
     7     for (int i=1;i<=n;i++) scanf("%d",&a[i]);
     8     for (int i=1;i<n;i++)
     9     {
    10         if (a[i]&1)
    11         {
    12             if (a[i+1]==0) 
    13             {
    14                 Flag=false;
    15                 break;
    16             }
    17             a[i+1]--;
    18         }
    19     }
    20     if (a[n]&1) Flag=false;
    21     if (Flag) puts("YES"); else puts("NO");
    22     return 0;    
    23 }
    B

    C 并查集+暴力 没写路径压缩T了好久..

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <vector>
     4 #define pb push_back
     5 using namespace std;
     6 const int Maxn=400100;
     7 int Father[Maxn],c[Maxn],Last[Maxn],l[Maxn],r[Maxn],n,m,k,tot,Cnt[Maxn],Ans,num[Maxn];
     8 vector<int> V[Maxn];
     9 int GetFather(int x)
    10 {
    11     if (x==Father[x]) return x;
    12     return Father[x]=GetFather(Father[x]);
    13 }
    14 inline void Merge(int x,int y) {Father[GetFather(x)]=GetFather(y);}
    15 inline int Max(int x,int y) {return x>y?x:y;}
    16 int main()
    17 {
    18     scanf("%d%d%d",&n,&m,&k); tot=0;
    19     for (int i=1;i<=n;i++) scanf("%d",&c[i]);
    20     for (int i=1;i<=n;i++) Father[i]=i;
    21     for (int i=1;i<=m;i++) scanf("%d%d",&l[i],&r[i]),Merge(l[i],r[i]);
    22     for (int i=1;i<=n;i++) if (Father[i]==i) num[i]=++tot;
    23     for (int i=1;i<=n;i++) V[num[GetFather(i)]].pb(c[i]);
    24     Ans=0;
    25     for (int i=1;i<=tot;i++)
    26     {
    27         int Ret=0,Tmp=V[i].size();
    28         for (int j=0;j<Tmp;j++)    Cnt[V[i][j]]=0;
    29         for (int j=0;j<Tmp;j++)
    30         {
    31             Cnt[V[i][j]]=Cnt[V[i][j]]+1;
    32             Ret=Max(Ret,Cnt[V[i][j]]);
    33         }
    34         Ans+=Tmp-Ret;
    35     }
    36     printf("%d",Ans);
    37     return 0;
    38 }
    C

    D 模拟+看了好久的题意 就是一个操作是每个数+1,是的最终的序列为字典序,比较的是序列,比较相邻两个得出可以在的区间求交即可.

     1 #include <iostream>
     2 #include <cstring>
     3 #include <algorithm>
     4 #include <cstdio>
     5 #include <vector>
     6 #define pb push_back
     7 using namespace std;
     8 const int Maxn=1000100;
     9 int n,c,Len[Maxn],cnt,B[Maxn],x;
    10 vector<int> V[Maxn];
    11 inline int Min(int x,int y) {return x>y?y:x;}
    12 void Work(int x,int y) 
    13 {
    14     int LEN=Min(Len[x],Len[y]);
    15     for (int i=0;i<LEN;i++)
    16     {
    17         if (V[x][i]==V[y][i]) continue;
    18         if (V[x][i]<V[y][i])
    19         {
    20             B[0]++,B[c-V[y][i]+1]--;
    21             B[c-V[x][i]+1]++,B[c]--;
    22         } else B[c-V[x][i]+1]++,B[c-V[y][i]+1]--;
    23         cnt++; return;
    24     }
    25     if (Len[x]>Len[y])
    26     {
    27         puts("-1");
    28         exit(0);
    29     }
    30 }
    31 int main()
    32 {
    33     scanf("%d%d",&n,&c);
    34     for (int i=1;i<=n;i++)
    35     {
    36         scanf("%d",&Len[i]);
    37         for (int j=1;j<=Len[i];j++) scanf("%d",&x),V[i].pb(x);
    38         if (i!=1) Work(i-1,i);        
    39     }
    40     int Sum=0;
    41     for (int i=0;i<c;i++)
    42     {
    43         Sum+=B[i];
    44         if (Sum==cnt) 
    45         {
    46             printf("%d
    ",i);
    47             return 0;
    48         }
    49     }
    50     puts("-1");
    51     return 0;
    52 }
    D

    E 直接模拟..

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int n,tot,i,a[200010]; 
     4 inline int Max(int x,int y) {return x>y?x:y;}
     5 int main()
     6 {
     7     scanf("%d",&n);
     8     for(i=1;i<=n;i++) scanf("%d",&a[i]),a[i]+=a[i-1];
     9     tot=a[n];
    10     for(i=n-1;i>1;i--) tot=Max(tot,a[i]-tot);
    11     printf("%d
    ",tot);
    12 }
    E

    F 枚举前缀就可以了

     1 #include <cstdio>
     2 #define LL long long
     3 const LL Maxn=200000;
     4 LL n,x,vis[Maxn+100],Sum[Maxn+100],Ans;
     5 int main()
     6 {
     7     scanf("%I64d",&n);
     8     for (LL i=1;i<=n;i++) scanf("%I64d",&x),vis[x]++;
     9     for (LL i=1;i<=Maxn;i++) Sum[i]=Sum[i-1]+vis[i];
    10     Ans=0;
    11     for (LL i=1;i<=Maxn;i++) 
    12         if (vis[i]>0)
    13         {
    14             LL Res=0,t=Maxn/i;
    15             for (LL j=1;j<=t;j++) Res+=(Sum[j*i-1]-Sum[(j!=1)?j*i-i-1:j*i-i])*(j-1)*i;
    16             Res+=(Sum[Maxn]-Sum[t*i-1])*t*i;
    17             if (Res>Ans) Ans=Res;
    18         }
    19     printf("%I64d
    ",Ans);
    20     return 0;
    21 }
    F
  • 相关阅读:
    C# 枚举转换selectlistitem 及 MVC @Html.DropDownListFor() 调用详细
    C# WebRequest
    .net面试问答
    正则实现二代身份证号码验证详解
    VS2015 推荐插件
    ASP.NET MVC Areas View 引用 外部母版视图
    基于VMware Workstation搭建开发服务器
    使用ASP.NET WEB API 进行 JWT授权登录(二)
    使用ASP.NET WEB API 进行 JWT授权登录(一)
    如何五分钟完全卸载sqlserver 2012
  • 原文地址:https://www.cnblogs.com/yyjxx2010xyu/p/5971073.html
Copyright © 2011-2022 走看看