zoukankan      html  css  js  c++  java
  • 【NOIP2007】提高组

    T1统计数字

    题目链接

    排个序扫一遍就没了吧......

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<algorithm>
     5 using namespace std;
     6 int a[200005];
     7 int read()
     8 {
     9     char c=getchar();int ans=0,f=1;
    10     while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    11     while(c>='0'&&c<='9'){ans=ans*10+c-48;c=getchar();}
    12     return ans*f;
    13 }
    14 int main()
    15 {
    16     int n=read(),m=0;
    17     for(int i=1;i<=n;i++)a[i]=read();
    18     sort(a+1,a+1+n);
    19     for(int i=1;i<=n;i++)
    20     {
    21         if(a[i]==a[i+1])m++;
    22         else
    23         {
    24             printf("%d %d
    ",a[i],m+1);
    25             m=0;
    26         }
    27     }
    28     return 0;
    29 }
    T1

    T2字符串的展开

    题目链接

    超级大分类的模拟题,没什么好讲的......

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 const int N=1e5+10;
     5 using namespace std;
     6 char c[N];
     7 int p1,p2,p3;
     8 int main()
     9 {
    10     scanf("%d %d %d",&p1,&p2,&p3);
    11     scanf("%s",c+1);
    12     int len=strlen(c+1);
    13     for(int i=1;i<=len;i++){
    14         if(c[i]!='-'){
    15             printf("%c",c[i]);continue;
    16         }
    17         if(i==1){printf("-");continue;}
    18         if(c[i+1]=='-'||c[i-1]=='-'){printf("-");continue;}
    19         if(c[i+1]<=c[i-1]||(c[i+1]>='a'&&c[i-1]<='9')){printf("-");continue;}
    20         if(c[i+1]==c[i-1]+1)continue;
    21         if(p1==3){
    22             for(int j=1;j<=p2*(c[i+1]-c[i-1]-1);j++)printf("*");
    23             continue;
    24         }
    25         if(p3==1){
    26                 if(p1==1||(c[i-1]>='0'&&c[i-1]<='9')){
    27                     for(int j=c[i-1]+1;j<=c[i+1]-1;j++){
    28                         for(int k=1;k<=p2;k++)printf("%c",j);
    29                     }
    30                 }
    31                 else{
    32                     for(int j=c[i-1]+1;j<=c[i+1]-1;j++){
    33                         for(int k=1;k<=p2;k++)printf("%c",j-('a'-'A'));
    34                     }
    35                 }
    36         }
    37         else{
    38             if(p1==1||(c[i-1]>='0'&&c[i-1]<='9')){
    39                     for(int j=c[i+1]-1;j>=c[i-1]+1;j--){
    40                         for(int k=1;k<=p2;k++)printf("%c",j);
    41                     }
    42                 }
    43                 else{
    44                     for(int j=c[i+1]-1;j>=c[i-1]+1;j--){
    45                         for(int k=1;k<=p2;k++)printf("%c",j-('a'-'A'));
    46                     }
    47                 }
    48         }
    49     }
    50     return 0;
    51 }
    T2

    T3树网的核

    题目链接

    n3跑一遍floyd预处理出两两之间最短路,n2枚举两个在直径上的点统计答案就好了。

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cstring>
     4 const int inf=0x3f3f3f3f;
     5 using namespace std;
     6 int n,s,a,b,c,maxx=0,mxi,mxj;
     7 int dis[305][305];
     8 int read()
     9 {
    10     int ans=0,f=1;char c=getchar();
    11     while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    12     while(c>='0'&&c<='9'){ans=ans*10+c-48;c=getchar();}
    13     return ans*f;
    14 } 
    15 int main()
    16 {
    17     n=read();s=read();
    18     for(int i=1;i<=n;i++)
    19         for(int j=1;j<=n;j++)
    20             if(i!=j)dis[i][j]=inf;
    21     for(int i=1;i<=n-1;i++){
    22         a=read();b=read();c=read();dis[a][b]=dis[b][a]=c;
    23     }
    24     for(int k=1;k<=n;k++)
    25         for(int i=1;i<=n;i++)
    26             for(int j=1;j<=n;j++){
    27                 if(dis[i][k]>=inf||dis[k][j]>=inf)continue;
    28                 dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
    29                 if(dis[i][j]>maxx){
    30                     maxx=dis[i][j];
    31                     mxi=i;mxj=j;
    32                 }
    33             }
    34     int ans=inf;
    35     for(int i=1;i<=n;i++){
    36         if(dis[mxi][i]+dis[i][mxj]!=dis[mxi][mxj])continue;
    37         for(int j=1;j<=n;j++){
    38             if(dis[mxi][j]+dis[j][mxj]!=dis[mxi][mxj]||dis[i][j]>s)continue;
    39             int ecc=0;
    40             ecc=max(min(dis[mxi][i],dis[mxi][j]),min(dis[mxj][i],dis[mxj][j]));
    41             ans=min(ans,ecc);
    42         }
    43     }
    44     printf("%d",ans);
    45     return 0;
    46 } 
    T3

    T4矩阵取数游戏

    题目链接

    这题要是没有高精就是一道简单dp了,不过加上高精乘之后就很不好写了。然而我们可以把状态转移方程化为:

    f[i][j]=2*max(f[i+1][j]+mp[i]+mp[i][j],f[i][j-1]+mp[j]);

    这样我们就只用写两个高精加就行了(然而还是很不好写)......

     1 #include<cstdio>
     2 #include<cmath>
     3 #include<cstring>
     4 #define mem(a,p) memset(a,p,sizeof(a))
     5 #include<algorithm>
     6 const int N=85;
     7 int n,m;
     8 int read(){
     9     int ans=0,f=1;char c=getchar();
    10     while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    11     while(c>='0'&&c<='9'){ans=ans*10+c-48;c=getchar();}
    12     return ans*f;
    13 }
    14 int f[N][N][100],data[N][N],ans[100],kk[100],pp[100],dd[100];
    15 int mxa(int x,int y){return x>y?x:y;}
    16 void plus0(int x[],int y[]){
    17     x[0]=mxa(x[0],y[0]);
    18     for(int i=1;i<=x[0];i++){
    19         x[i]+=y[i];
    20         x[i+1]+=x[i]/10;
    21         x[i]%=10;
    22     }
    23     if(x[x[0]+1]>0)x[0]++;
    24 }
    25 void max(int x[],int y[],int z[]){
    26     if(y[0]>z[0]){plus0(x,y);return;}
    27     if(z[0]>y[0]){plus0(x,z);return;}
    28     for(int i=y[0];i>=1;i--){
    29         if(y[i]>z[i]){plus0(x,y);return;}
    30         if(y[i]<z[i]){plus0(x,z);return;}
    31     }
    32     plus0(x,y);
    33 }
    34 void plus1(int x[],int y,int z[]){
    35     x[1]=z[1]+y;
    36     for(int i=1;i<=z[0];i++){
    37         x[i+1]+=x[i]/10+z[i+1];
    38         x[i]%=10;
    39     }
    40     x[0]=z[0];
    41     if(x[x[0]+1]>0)x[0]++;
    42 }
    43 int main(){
    44     n=read();m=read();
    45     for(int i=1;i<=n;i++)
    46         for(int j=1;j<=m;j++)
    47             data[i][j]=read();
    48     for(int r=1;r<=n;r++){
    49         mem(f,0);
    50         for(int i=m;i>=1;i--){
    51             for(int j=i;j<=m;j++){
    52                 mem(kk,0);mem(pp,0);
    53                 plus1(kk,data[r][j],f[i][j-1]);
    54                 for(int k=0;k<=kk[0];k++)pp[k]=kk[k];
    55                 plus0(kk,pp);mem(dd,0);mem(pp,0);
    56                 plus1(pp,data[r][i],f[i+1][j]);
    57                 for(int k=0;k<=pp[0];k++)dd[k]=pp[k];
    58                 plus0(pp,dd);
    59                 max(f[i][j],pp,kk);
    60             }
    61         }
    62         plus0(ans,f[1][m]);
    63     }
    64     if(ans[0]==0)return printf("0"),0;
    65     for(int i=ans[0];i>=1;i--)printf("%d",ans[i]);
    66     return 0;
    67 }
    T4
  • 相关阅读:
    jquerymobile 页面间URL传值
    xcode 静态链接库的问题
    iPad 用户体验关键要素
    Enable SharePoint Designer for Project Web App PWA 2010
    后台定位
    做一个iPhone应用需要花多少钱?
    ios无法获取坐标
    重装系统后ORACLE数据库恢复的方法
    【Web】百度有聊官网的一些布局不好之处
    【Pagoda】在pagodabox里建立项目并连接数据库
  • 原文地址:https://www.cnblogs.com/JKAI/p/7788304.html
Copyright © 2011-2022 走看看