XTU OJ 1040 ,1038

有一种工业零件,分成左右两半,它们的形状由’X’和空格表示的二维图形表示,比如:左半的零件形状如下:
XXXXX
XXX
XXXX
XXX
右半的零件的形状如下
                    XXX                                                               
                  XXXX                                                               
                  XXXX                                                               
                XXXXX                                                               
所有的左半边的零件的左边第一列都是X,所有右半的零件的右边第一列都是X。
把这样的左右两个零件紧密地拼在一起,则可能存在空洞。零件本身也可能有空洞,但不会存在断裂的零件,每个空洞为一个空格,要求你写一个程序求出空洞的大小(空格的数目)。


输入:
 
第一行是一个整数K,表示有多少个测试用例,以后每一个测试用例占2n+1行。每个测试用例的第一行为一个整数n,(1<=n<=20),从第2行到n+1行为左半零件的二维图形,从第n+2行到2n+1行为右半零件。左半零件左对齐,最长一行不超过25列,
右半零件右对齐,最长一行不超过25列


输出:

每行输出一个测试用例的结果。

 

Sample Input

2
4
XXXXX
XXX
XXXX
XXX
  XXX
 XXXX
 XXXX
XXXXX
2
XXXXX
X
XXXXX
  XXX
 

Sample Output

1
6
 

Source

 

 

#include<stdio.h>
#include<string.h>
char a[30][100],b[30][100];
int len[100];
int main()
{
    int k,n,i,length,j,num,maxnum;
    int sum=0,maxlen;
    scanf("%d",&k);
    while(k--)
    {
        scanf("%d",&n);
        num=0;
        getchar();
        for(i=0;i<n;i++)//分别求出两段字母的X的个数
        {
            gets(a[i]);
            length=strlen(a[i]);
            for(j=0;j<length;j++)
            {
             if(a[i][j]=='X')
             sum++;
            }
           
        }
        for(i=0;i<n;i++)
        {
            gets(b[i]);
            length=strlen(b[i]);
            for(j=0;j<length;j++)
            {
             if(b[i][j]=='X')
             sum++;
             
            }
            for(j=0;j<length;j++)
            {
             if(b[i][j]==' ')
             {
              num++;
             
             }
             if(b[i][j]=='X')
             break;
            }
            len[i]=length-num;
            num=0;
           
           
           
        }
        maxlen=strlen(a[0])+len[i];
        for(i=0;i<n;i++)//求出拼凑出来的最长的一行的值
            if((strlen(a[i])+len[i])>=maxlen)
                maxlen=strlen(a[i])+len[i];//求出最大的一行
        sum=n*maxlen-sum;//求出空格的个数
        printf("%d\n",sum);
        sum=0;
    }
    return 0;
}
// getchar();

 

S = s1 s2...s2n 是一个符合格式的括号的字符串,S能按下面两种方式编码:
P编码:编码是一个整数序列P = p1 p2...pn,pi是第i个右括号之前的左括号的数目。
W编码:编码是一个整数序列W= p1 p2...pn,wi是第i个右括号的编码值,它等于这个右括号到与之匹配的左括号之间的右括号的数目(包括它自己)。
比如:

 

S

(

(

(

(

)

(

)

(

)

)

)

)

P

 

 

 

 

4

 

5

 

6

6

6

6

W

 

 

 

 

1

 

1

 

1

4

5

6

 

 

 

请写一个程序将P序列转换成W序列。


输入:

第一行是一个整数K,表示有多少个测试用例,以后每两行一个测试用例。每个测试用例第一行为一个整数n(1 <= n <= 20),表示P序列长度,每个测试用例第二行n个非负整数,每个整数之间有一个空格分隔。


输出:

每行输出一个测试用例的结果。每行包括n个整数,每个整数之间用一个空格分隔。

 

Sample Input

2
6
4 5 6 6 6 6
9
4 6 6 6 6 8 9 9 9
 

Sample Output

1 1 1 4 5 6
1 1 2 4 5 1 1 3 9

 

#include <stdio.h>
#include <string.h>
int main()
{
    int n,i,j,l,k,flag,length,figure,T;
    int str[1111];
    char num[11111];
    scanf("%d",&n);
    while(n--)
    {
        k=0;
        int kyx [11111]={0};
        figure=0;
        memset(num,'\0',sizeof(num));
        scanf("%d",&l);
        for(i=0;i<l;i++)
        {
            scanf("%d",&str[i]);
        }
        
        for(i=0;i<l;i++)
        {
            if(i==0)
            {
            for(j=0;j<str[i];j++)
            {
                num[k]='(';
                k++;
            }
            num[k]=')';
            }
            else
            {
            for(j=0;j<(str[i]-str[i-1]);j++)//4.5.6.6.6.6
            {
                k++;
                num[k]='(';
            
            }
            k++;
            num[k]=')';
            }
        }
        length=strlen(num);
        //puts(num);
        for(i=0;i<length;i++)
        {
            if(num[i]=='(')
            {
                kyx[i]=1;
            }
        }
        for(i=0;i<length;i++)
        {
            if(num[i]==')')
            {
                for(j=i;j>=0;j--)
                {
                    if(num[j]==')')
                    {
                    figure++;
                    }
                    else if((num[j]=='(')&&kyx[j]!=0)
                    {
                        if(i!=length-1)
                        {
                        
                        kyx[j]=0;
                        printf("%d ",figure);
                        figure=0;
                        break;
                        }
                        if(i==length-1)
                        {
                        kyx[j]=0;
                        printf("%d",figure);
                        figure=0;
                        break;
                        }
                    }
                }
            }
        } 
        printf("\n");   
    }
    return 0;
}

 

 

 

posted @ 2019-12-22 21:05  adsry  阅读(607)  评论(0编辑  收藏  举报