Life is short, so we need program

每日一题, 积累从点滴开始

  :: 首页 :: 博问 :: 闪存 :: :: 联系 :: :: 管理 ::

由于这次的题解字数比较多。所以我只把代码贴出来,大家好好看看。

ZJU1003-Crashing Balloon

【程序代码】

#include <iostream>
#include <cstdio>
using namespace std;
bool aTrue,bTrue;
int judge(int m,int n,int p)
{
    if(m==1&&n==1)
    {
        aTrue=true;
        return 0;
    }
    if(n==1)    bTrue=true;
    while(p>0)
    {
        if(m%p==0)    judge(m/p,n,p-1);
        if(n%p==0)    judge(m,n/p,p-1);
        p--;
    }
    return 0;
}
int main()
{
    int a,b;
    while(scanf("%d%d",&a,&b)!=EOF)
    {
        int temp;
        if(a<b)
        {
            temp=a;
            a=b;
            b=temp;
        }
        aTrue=false;bTrue=false;
        judge(a,b,100);
        if(!aTrue&&bTrue)
        printf("%d\n",b);
        else
        printf("%d\n",a);
    }
    return 0;
}

zju1006-Do the Untwist

【程序代码】

#include <iostream>
#include <string>
using namespace std;

int main()
{
    int k;
    char a[80];
    char c[80];
    int b[100];
    while(cin>>k&&k)
    {
        cin>>a;
        int n=strlen(a);
        for(int i=0;i<n;i++)
        {
            if(a[i]>='a'&&a[i]<='z')
                b[i]=a[i]-96;
            else if(a[i]=='_')
                b[i]=0;
            else    b[i]=27; 
        }
        int d[100];
        for(int i=0;i<n;i++)
        {
            int t=k*i%n;
            d[t]=(b[i]+i)%28;
        }
        for(int i=0;i<n;i++)
        {
            if(d[i]>0&&d[i]<27)
                c[i]=d[i]+96;
            else if(d[i]==0)    c[i]='_';
            else    c[i]='.';
        }
        for(int i=0;i<n;i++)
        cout<<c[i];
        cout<<endl;
    }
    return 0;
}

zju1005-Jugs

【程序代码】

#include <stdio.h>
#include <stdlib.h>

//a pour b
int main()
{
    int a,b,n,t;
    while(scanf("%d%d%d",&a,&b,&n)){

        if(a==1){
            for(t = 1;t<=n;t++)
                printf("fill A\npour A B\n");
            printf("success\n");
            continue;
        }
        t = 0;
            while(t!=n){
                printf("fill A\npour A B\n");
                t+=a;
                if(t>=b){
                    t-=b;
                    printf("empty B\npour A B\n");
                }
            }
            printf("success\n");
        }
    return 0;
}

ZJU1009-Enigma

【程序代码】

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;

int main()
{
    int i,j;
    int iChange[3][26];
    int iConvert[3];
    char cTemp[1000];
    int iCase=0;
    int m;
    while(scanf("%d",m)&&m)
    {
        if(iCase++)    printf("\n");
        printf("Enigma %d:\n",iCase);
        for(i=0;i<3;i++)
        {
            scanf("%s",&cTemp);
            for(j=0;j<m;j++)
                iChange[i][cTemp[j]-'A']=j-(cTemp[j]-'A');
                
        }
        int n;
        scanf("%d",&n);
        while(n--)
        {
            scanf("%s",&cTemp);
            for(i=0;i<strlen(cTemp);i++)
            {
                iConvert[0]=i%m;
                iConvert[1]=(i/m)%m;
                iConvert[2]=(i/(m*m))%m;
                int t=cTemp[i]-'A';
                for(j=2;j>=0;j--)
                {
                    t+=iChange[j][(t-iConvert[j]+m)%m];
                    t=(t+m)%m;
                }
                printf("%c",t+'a');
            }
            printf("\n");
        } 
    }
    return 0;
}

zju1016-Parencodings

【程序代码】

#include <stdio.h>
#include <string.h>
int main()
{
    int a[1000],str[10000],j,i,n,t,x,loop,k,w,flag,sum;
    while(scanf("%d",&t)!=EOF)
    {
        for(i=0;i<t;i++)
        {
            memset(str,0,sizeof(str));   //very important!!!!!!
            scanf("%d",&n);
            loop=0;x=0;
            for(j=1;j<=n;j++)            //left parenthesis   -1 表示
            {                            //right parenthesis  1  表示
               scanf("%d",&a[j]);        //-1  1 存放在str[10000]中
               for(k=loop+1;k<=a[j];k++)
                  str[k+x]=-1;
               x++;
               str[a[j]+x]=1;
             //  loop=a[j]+2;
               loop=a[j];
            }
            flag=1;
            for(j=1;str[j];j++)
            {
                if(str[j]==1)
                {
                    sum=0;w=0;
                    for(k=j;;k--)
                    {
                        sum+=str[k];
                        if(str[k]==1)
                           w++;
                        if(sum==0)break;
                    }
                    if(flag==1){printf("%d",w);flag=0;}
                    else printf(" %d",w);
                }
            }
            printf("\n");
        }
    }
    return(0);
}

 

posted on 2013-05-22 11:16  CDU_ICPC  阅读(264)  评论(0编辑  收藏  举报