1 条题解

  • 0
    @ 2025-8-24 22:37:47

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 褚橙
    没人记得的菜鸡

    搬运于2025-08-24 22:37:46,当前版本为作者最后更新于2022-08-05 11:27:17,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    这里是蒟蒻第一次写题解,有错误请多多指教。

    思路

    第一眼一看就是黄题搜索,再一看,其实是一道普通的模拟。

    采用4重循环的方法:

    1. 前三重循环枚举三给不同的字符串。
    2. 将字符串组合。
    3. 最后一个循环判断字符串是否成立。

    注:因为输入是按字典序,所以不用再排序。

    样例模拟

    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啦。

    • 1

    信息

    ID
    7582
    时间
    1000ms
    内存
    32MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者