P8296 [COCI2012-2013#2] KRIZALJKA
这里是蒟蒻第一次写题解,有错误请多多指教。
思路
第一眼一看就是黄题搜索,再一看,其实是一道普通的模拟。
采用4重循环的方法:
- 前三重循环枚举三给不同的字符串。
- 将字符串组合。
- 最后一个循环判断字符串是否成立。
注:因为输入是按字典序,所以不用再排序。
样例模拟
1. ANA
2. ANA
3. DAR
4. DAR
5. RAD
6. RAD
可以写成:
3 1 5
4 D A R
2 A N A
6 R A D
代码
#include<bits/stdc++.h>
using namespace std;
int n=6;//这里n均为6
string a[10];
int main()
{
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
for(int k=1;k<=n;k++)//枚举三个数
{
if(i==j||j==k||k==i)//判重
{
continue;
}
string x;
x=x+a[i][0]+a[j][0]+a[k][0];
string y;
y=y+a[i][1]+a[j][1]+a[k][1];
string z;
z=z+a[i][2]+a[j][2]+a[k][2];
//分别令 x,y,z 为第一列,第二列,第三列
bool f1=0,f2=0,f3=0;
//成功的就可以标记
for(int l=1;l<=n;l++)
{
if(l==i||l==j||l==k)
{
continue;
}
if(a[l]==x&&!f1)//会有重复的记得判重
{
f1=1;
}
else if(a[l]==y&&!f2)//同上
{
f2=1;
}
else if(a[l]==z)
{
f3=1;
}
}
if(f1&&f2&&f3)//成功了直接输出,并结束
{
cout<<a[i]<<endl;
cout<<a[j]<<endl;
cout<<a[k]<<endl;
return 0;
}
}
}
}
cout<<0<<endl;//未成功的输出0
return 0;
}
这样就可以AC啦。