2010-1138

从 Trac 迁移的文章

这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。

原文章内容如下:

题目大意是一个有9列的蜂巢,每次蜜蜂向这个蜂巢的蜂巢的某列滴下一滴蜂蜜,如果这滴蜂蜜和该列中最上方格子的蜂蜜类型一样,则可以制成一颗糖果而滴下的蜂蜜和该列蜂巢的蜂蜜立即从蜂巢中消失,又因为每列可放蜂蜜有限,所以当某列已经放满蜂蜜的时候就不能继续放下蜂蜜了。[[BR]]按照题目要求只要用栈简单模拟下,就可以得到最后可以制成的糖果数和最后每列剩下的糖果,最后按照要求输出蜂巢的结构以及其中剩下的蜂蜜的类型即可[[BR]]
{{{
#!cpp
#include<cstdio>
#include<cstring>
#include<cmath>
char a[10][15],hua[30][50];
int ah[10];
int gao[10]={0,6,7,8,9,10,9,8,7,6};
int kkk[24]={0,10,12,14,16,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,17,15,13,11};
int ggg[10]={0,18,19,20,21,22,21,20,19,18};
int main()
{
    long n,j,k,i,ans,j1,k1;
    char tm[10];
    while(scanf("%ld",&n)!=EOF)
    {
        ans=0;
        memset(a,' ',sizeof(a));
        memset(ah,0,sizeof(ah));
        for (j=1;j<=n;++j)
        {
            scanf("%s",tm);
            i=tm[0]-'A'+1;
            if (ah[i]<gao[i]+1)
            {
                a[i][ah[i]]=tm[1];
                if (ah[i]!=0&&a[i][ah[i]]==a[i][ah[i]-1]  ) { ++ans;--ah[i];} else ++ah[i];
            }
        }       
        printf("The number of candy is %d.\n",ans);
        memset(hua,' ',sizeof(hua));

        i=-1;
        for (j=1;j<=23;++j)
        {
            for (k=1;k<=6;++k)
            {
                if ((i+(k-1)*4)>0) hua[j][i+(k-1)*4]='/';
                if ((i+(k-1)*4+2)>0) hua[j][i+2+(k-1)*4]='\\';
                if ((i+(k-1)*4+3)>0) hua[j][i+3+(k-1)*4]='_';
            }
            if (i==1) i=-1; else i=1;
        }   

        for (j=1;j<=9;++j) { hua[1][j]=' ';hua[23][j-1]=' ';}
        for (j=1;j<=7;++j) { hua[2][j]=' ';hua[22][j-1]=' ';}
        for (j=1;j<=5;++j) { hua[3][j]=' ';hua[21][j-1]=' ';}
        for (j=1;j<=3;++j) { hua[4][j]=' ';hua[20][j-1]=' ';}
        for (j=1;j<=1;++j) { hua[5][j]=' ';hua[19][j-1]=' ';}
        for (j=1;j<=9;++j)
            for (k=0;k<ah[j];++k)
            {
                j1=2*j;
                k1=ggg[j]-k*2;
                hua[k1][j1]=a[j][k];
            }
        for (j=1;j<=23;++j)
        {
            for (k=1;k<=kkk[j];++k) printf("%c",hua[j][k]);
            printf("\n");
        }
    }


    return 0;
}
}}}

题目大意是一个有9列的蜂巢,每次蜜蜂向这个蜂巢的蜂巢的某列滴下一滴蜂蜜,如果这滴蜂蜜和该列中最上方格子的蜂蜜类型一样,则可以制成一颗糖果而滴下的蜂蜜和该列蜂巢的蜂蜜立即从蜂巢中消失,又因为每列可放蜂蜜有限,所以当某列已经放满蜂蜜的时候就不能继续放下蜂蜜了。
按照题目要求只要用栈简单模拟下,就可以得到最后可以制成的糖果数和最后每列剩下的糖果,最后按照要求输出蜂巢的结构以及其中剩下的蜂蜜的类型即可

#include<cstdio>
#include<cstring>
#include<cmath>
char a[10][15],hua[30][50];
int ah[10];
int gao[10]={0,6,7,8,9,10,9,8,7,6};
int kkk[24]={0,10,12,14,16,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,17,15,13,11};
int ggg[10]={0,18,19,20,21,22,21,20,19,18};
int main()
{
    long n,j,k,i,ans,j1,k1;
    char tm[10];
    while(scanf("%ld",&n)!=EOF)
    {
        ans=0;
        memset(a,' ',sizeof(a));
        memset(ah,0,sizeof(ah));
        for (j=1;j<=n;++j)
        {
            scanf("%s",tm);
            i=tm[0]-'A'+1;
            if (ah[i]<gao[i]+1)
            {
                a[i][ah[i]]=tm[1];
                if (ah[i]!=0&&a[i][ah[i]]==a[i][ah[i]-1]  ) { ++ans;--ah[i];} else ++ah[i];
            }
        }       
        printf("The number of candy is %d.\n",ans);
        memset(hua,' ',sizeof(hua));
        i=-1;
        for (j=1;j<=23;++j)
        {
            for (k=1;k<=6;++k)
            {
                if ((i+(k-1)*4)>0) hua[j][i+(k-1)*4]='/';
                if ((i+(k-1)*4+2)>0) hua[j][i+2+(k-1)*4]='\\';
                if ((i+(k-1)*4+3)>0) hua[j][i+3+(k-1)*4]='_';
            }
            if (i==1) i=-1; else i=1;
        }   
        for (j=1;j<=9;++j) { hua[1][j]=' ';hua[23][j-1]=' ';}
        for (j=1;j<=7;++j) { hua[2][j]=' ';hua[22][j-1]=' ';}
        for (j=1;j<=5;++j) { hua[3][j]=' ';hua[21][j-1]=' ';}
        for (j=1;j<=3;++j) { hua[4][j]=' ';hua[20][j-1]=' ';}
        for (j=1;j<=1;++j) { hua[5][j]=' ';hua[19][j-1]=' ';}
        for (j=1;j<=9;++j)
            for (k=0;k<ah[j];++k)
            {
                j1=2*j;
                k1=ggg[j]-k*2;
                hua[k1][j1]=a[j][k];
            }
        for (j=1;j<=23;++j)
        {
            for (k=1;k<=kkk[j];++k) printf("%c",hua[j][k]);
            printf("\n");
        }
    }
    return 0;
}