[AHOI2004]智能探险车 题解
题面:
输入:
输出:
简述题面:
给定n行m个单词,判断相同列单词是否唯一,如果同一列单词唯一输出单词,否则输出”*”.
输入
m,n
2~m+1行每行n个字符串
输出
一行m个字符串,如题意或单词或”*”
输入输出样例
输入:
4 3
sunny plain full many
sunny mountain full many
sunny mountain full few
输出:
sunny * full *
题解:
可以考虑输入的时候,第一行拷贝为样本串,而后2~m行输入时直接判断是否相同,并且开一个bool数组存储当前第i行第j列是否唯一
输出时通过bool数组判断:唯一输出单词,否则输出”*”.
Code:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cmath>
#include <ctime>
#include <algorithm>
#include <cctype> //头文件
#define maX(a,b) (a>b?a:b)
#define miN(a,b) (a<b?a:b)
#define LL long long
#define N 1010 //宏定义
using namespace std;
inline int read()
{
register int x=0;
register bool f=0;
register char ch=getchar();
while(!isdigit(ch))
{
f^=!(ch^'-');
ch=getchar();
}
while(isdigit(ch))
{
x=(x+(x<<2)<<1)+(ch^'0');
ch=getchar();
}
return f?-x:x;
} //读入优化
inline void print(int x)
{
register int sc[30]={0},tot=0;
do
{
sc[++tot]=x%10;
x/=10;
}while(x);
while(tot)
putchar('0'+sc[tot--]);
} //输出优化
string s[N],tmp; //s存储拷贝串 tmp作为临时输入字符串
bool ans[N]; //判断是否唯一数组
int n,m;
int main()
{
m=read();
n=read();
for(register int i=1;i<=m;i++)
cin>>s[i]; //读入n,m,与拷贝串(对比串)
for(register int i=2;i<=n;i++)
{
for(register int j=1;j<=m;j++) //输入
{
cin>>tmp;
if(tmp!=s[j]) //对比是否相同
ans[j]=1; //存储对比结果
}
}
for(register int i=1;i<=m;i++)
if(ans[i]) //唯一
printf("* ");
else //不唯一
cout<<s[i]<<" "; //根据题目输出
return 0;
}