hdu_1278 漂亮面料的设计

来源:互联网 发布:数据库切片 编辑:程序博客网 时间:2024/06/10 10:15

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1278

分析:我的是把第一列的放进数组的第一行,然后按规则模拟,最后比较输出就好。

代码如下:

#include<stdio.h>#include<string.h>char ans[210][210];void slove(char ans[][210],int lie,int a,int h){    int i,j;    if(a>=0)    {        j=a;    }    else    {        j=lie+a;    }     for(i=0;i<lie;i++)    {        ans[h][j++]=ans[h-1][i];        if(j>=lie) j%=lie;    }//    printf("-------------------------\n");//    printf("a=%d\n",a);//    for(i=0;i<h;i++)//    {//        for(j=0;j<lie;j++) printf("%c",ans[i][j]);//        printf("\n");//    }//    printf("-------------------------\n");}int main(){//    freopen("in.txt","r",stdin);//    freopen("out.txt","w",stdout);    int m,n;    while(~scanf("%d%d",&m,&n))    {        int t,k,i,j,one[210],zero[210];        for(i=0;i<m;i++) scanf("%d",one+i);        for(i=0;i<m;i++) scanf("%d",zero+i);        k=0;        int lie=0;        for(i=0;i<m;i++)  //输入完一列。        {            for(j=0;j<one[i];j++)            {                ans[0][k++]='1';                lie++;            }            for(j=0;j<zero[i];j++) {                ans[0][k++]='0';                lie++;            }        }        for(i=0;i<n;i++) scanf("%d",one+i);  //输入飞数。        for(i=0;i<n;i++) scanf("%d",zero+i);        t=1;        k=0;        for(i=0;i<n;i++)        {            while(zero[i]--)            {                slove(ans,lie,one[i],t++);            }        }        int hang=t-1;        if(strcmp(ans[0],ans[hang])==0)        {            for(i=lie-1;i>=0;i--){                for(j=0;j<hang;j++)                {                    printf("%c",ans[j][i]);                }                printf("\n");            }        }        else        {            printf("Can not make beautilful cloth !\n");        }    }    return 0;}
总结:第一次交时还是WA了,最后把Solve里面的if(a>0)改为了if(a>=0).