• 7-28-比赛


    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=27454#overview

    比赛.........还是英语没学好啊........有些题目看不懂.............= =

    A.Printer Queue

    //单独讲.............

    B.Parencodings

    很简单.......

    我是开了三个数组a[n],b[n],c[n]-------------a[n]代表输入的n个数,b[n]代表是输出的n个数,c[n]代表n个左括号的状态(配对了还是没有配对);

    b[0]=1;

    若a[i]-a[i-1]>0,那么i右括号所对应左括号就在它左边第一位,记b[i]=1,c[a[i]-1]=1(标记这个被配对的左括号);

    若a[i]-a[i-1]=0,那么从c[a[i]-1]开始向c[0]搜索,第一个没有被标记的右括号j就是配对的括号,即b[i]=a[i]-j,c[j]=1(标记配对括号);

    代码如下:

     1 #include<iostream>
     2 #include<string.h>
     3 #include<stdio.h>
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     int n,x;
     9     int a[1000],b[1000],c[1000];
    10     scanf("%d",&n);
    11     while(n--)
    12     {
    13         scanf("%d",&x);
    14         int i,j,k;
    15         for(i=0;i<x;i++)
    16             scanf("%d",&a[i]);
    17         memset(c,0,sizeof(c));
    18         c[a[0]-1]=1;
    19         for(i=1;i<x;i++)
    20              if((a[i]-a[i-1])!=0) c[a[i]-1]=1;
    21         b[0]=1;
    22         for(i=1;i<x;i++)
    23         {
    24             k=a[i]-a[i-1];
    25             if(k!=0) b[i]=1;
    26             else
    27             {
    28                 for(j=a[i]-1;j>=0;j--)
    29                     if(c[j]==0){ b[i]=a[i]-j; c[j]=1;break;}
    30             }
    31         }
    32         for(i=0;i<x-1;i++)
    33             printf("%d ",b[i]);
    34         printf("%d
    ",b[x-1]);
    35     }
    36     return 0;
    37 }

    C.Emag eht htiw Em Pleh

    先打出棋盘,再把点放到对应的位置,最后打印出棋盘。题目不难,就是要细心............WA了好几次,就是坐标点应该减‘0’时,写成了‘1’...........T T

    代码:

     1 #include<iostream>
     2 #include<cstring>
     3 #include<string>
     4 #include<cstdio>
     5 using namespace std;
     6 
     7 int main()
     8 {
     9     char a[63],b[63];
    10     string c[17];
    11     int i,j,k,xa,xb;
    12     for(i=0;i<17;i+=2)
    13         c[i]="+---+---+---+---+---+---+---+---+";
    14     for(i=1;i<17;i+=4)
    15         c[i]="|...|:::|...|:::|...|:::|...|:::|";
    16     for(i=3;i<17;i+=4)
    17         c[i]="|:::|...|:::|...|:::|...|:::|...|";
    18     gets(a);
    19     gets(b);
    20     xa=strlen(a);
    21     xb=strlen(b);
    22     k=7;
    23     for(i=7;i<xa;i++)
    24     {
    25         if(a[i]==',')
    26         {
    27             if(i-k==3)
    28         {
    29             c[(8-(a[i-1]-'0'))*2+1][2+(a[i-2]-'a')*4]=a[k];
    30             k=i+1;
    31         }
    32             else
    33             {
    34                 c[1+(8-(a[i-1]-'0'))*2][2+(a[i-2]-'a')*4]='P';
    35                 k=i+1;
    36             }
    37         }
    38     }
    39      c[1+(8-(a[k+1]-'0'))*2][2+(a[k]-'a')*4]='P';
    40      k=7;
    41     for(i=7;i<xb;i++)
    42     {
    43         if(b[i]==',')
    44         {
    45             if(i-k==3)
    46         {
    47             c[1+(8-(b[i-1]-'0'))*2][2+(b[i-2]-'a')*4]=b[k]+32;
    48             k=i+1;
    49         }
    50             else
    51             {
    52                 c[1+(8-(b[i-1]-'0'))*2][2+(b[i-2]-'a')*4]='p';
    53                 k=i+1;
    54             }
    55         }
    56     }
    57     c[1+(8-(b[k+1]-'0'))*2][2+(b[k]-'a')*4]='p';
    58     for(i=0;i<17;i++)
    59         cout<<c[i]<<endl;
    60     return 0;
    61 }

    D.Grandpa is Famous

    题目不难,我的解法是,用一个数组记录每个数字输入了多少次,再找出输入第二多的数字,再输出。

    代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     int a[10010],b[250000],i,j,x,y,n,max1,max2;
     9     while(scanf("%d%d",&x,&y)!=EOF)
    10     {
    11         if(x==0 && y==0) break;
    12         memset(a,0,sizeof(a));
    13         for(i=0;i<x*y;i++)
    14         {
    15             scanf("%d",&b[i]);
    16             a[b[i]]++;
    17         }
    18         max1=-1;
    19         max2=-1;
    20         for(i=0;i<10010;i++)
    21         {
    22             if(a[i]>max1)
    23             {
    24                 max2=max1;
    25                 max1=a[i];
    26             }
    27             else
    28                 if(a[i]>max2)
    29                     max2=a[i];
    30         }
    31         for(i=0,n=0;i<10010;i++)
    32             if(a[i]==max2)
    33             {
    34                 if(n==0)
    35                    printf("%d ",i);
    36                 else
    37                     printf(" %d",i);
    38             }
    39         printf("
    ");
    40     }
    41     return 0;
    42 }

    E.An Old Stone Game

           单独讲............

  • 相关阅读:
    oracle之同义词
    oracle之序列
    oracle之视图
    oracle表空间
    oracle 闪回技术
    oracle权限管理
    oracle的undo表空间
    创建数据库之间的连接
    oracle监听
    oracle11g文件系统库迁移到ASM库上面
  • 原文地址:https://www.cnblogs.com/teilawll/p/3224158.html
Copyright © 2020-2023  润新知