2008 - 解密

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

话说有一种加密方法,得出的密文是一个全部是小写字母的矩阵,解密的方法是将这些矩阵每一行和每一列的所有重复的字母都去掉,得到的结果从上到下,从左到右排成一排,这一排就是解出来的密码。

给出密文,请解出密码。

题目输入

第一行输入两个数nmn,m<100,表示密文的行数和列数接下来n行,每行m个小写字母,表示密文。

题目输出

每个样例输出一行,表示解出的密码。保证解出来的密码不为空。

输入/输出样例

输入格式

3 3
abc
bcd
cbc

输出格式

abcd

C++解答

#include<stdio.h>
#include<string.h>
#include<algorithm>
#define INF 100000000
using namespace std;
char a[100][100];
int b[100][100];
int zm[26];
int main()
{
       int n,m;
       while(scanf("%d%d",&n,&m)!=EOF)
       { memset(b,0,sizeof(b));
           for(int i=0;i<n;i++)
            scanf("%s",a[i]);
            for(int i=0;i<n;i++)
            { memset(zm,0,sizeof(zm));
                for(int j=0;j<m;j++)
                {
                    zm[a[i][j]-'a']++;
                    if(zm[a[i][j]-'a']==2)
                    {
                        for(int o=0;o<m;o++)
                            if(a[i][o]==a[i][j])
                            b[i][o]=INF;
                    }
                }
            }
             for(int i=0;i<m;i++)
            { memset(zm,0,sizeof(zm));
                for(int j=0;j<n;j++)
                {
                    zm[a[j][i]-'a']++;
                    if(zm[a[j][i]-'a']==2)
                    {
                        for(int o=0;o<n;o++)
                            if(a[o][i]==a[j][i])
                            b[o][i]=INF;
                    }
                }
            }
            for(int i=0;i<n;i++)
                for(int j=0;j<m;j++)
            {
                 if(b[i][j]!=INF)
                    printf("%c",a[i][j]);
            }
            printf("\n");


       }
}

Python解答

import sys
line=sys.stdin.readline()
while line:
    #print line
    n,m=map(int,line.split())
    ma=[]
    ans=""
    for i in range(n):
        line=sys.stdin.readline()
        ma.append(line)
    for i in range(n):
        for j in range(m):
            tag=1
            for k in range(n):
                #print map[k][j],map[i][j]
                if ma[k][j]==ma[i][j] and k!=i:
                    tag=0
                    break
            for k in range(m):
                if tag==0:
                    break
                if ma[i][j]==ma[i][k] and k!=j:
                    tag=0
                    break               
            if tag:
                ans+=ma[i][j]
    print ans
    line=sys.stdin.readline()