Color

Color

题目描述:
Alice, Bob and Yazid are good friends.
Each of them has a color, red, green or blue. Everyone’s color is different from the others’. They can describe their own colors in the format of [name] is [color]., such as Yazid is green…
Now they have made their descriptions in some order. After that, Yazid will do the following operations:
1.Connect the 3 sentences to get the initial string.
2.Remove all non-alphabetic characters.
3.Change all uppercase letters to lowercase.
For example, if the initial string is Yazid is green.Alice is red.Bob is blue., then after Yazid’s all operations, it will be turned to yazidisgreenaliceisredbobisblue.
Finally, Alice and Bob will insert any lowercase letters into any positions in this string to get the final string.
You are given the final string. Your task is to find the initial string. In particular:
•If there are multiple solutions, please output the minimum one in lexical order.
•If there is no solution, please output No solution. instead.
输入:
Read from the standard input.
The first line contains one integer T (T ≤ 500), representing the number of test cases. For each case:
•One line of a string containing only lowercase letters, representing the final string.
•It is guaranteed that the length of the final string won’t exceed 600.
输出:
Write to the standard output.
For each case:
•One line of a string, representing the initial string or No solution…
样例输入:
4
aliceisredbobisblueyazidisgreen
aliceisgreenbobisgreenyazidisgreen
aliceisyellowbobisblueyazidisgreen
xxyazidxxisxxgreenxxbobisblueaxlxixcxexixsxrxexdx
样例输出:
Alice is red.Bob is blue.Yazid is green.
No solution.
No solution.
Yazid is green.Bob is blue.Alice is red.
题目大意:有Alice,Bob,Yazid三个人,可以选择红色,绿色,蓝色,有一句话对其描述。将这句话的空格和标点去掉,得到一个字符串,然后再往里面插入一些奇奇怪怪的字符,问是否能在处理后的乱码中找出符合要求的字符串(三个人,分别对应不同的颜色),若有一种,输出之;若有多种,输出字典序最小的那种;若没有,输出“No solution.”。
题解:其实应该用搜索的,但自古暴力出奇迹,反正只有36种不同可能的字符串,一个一个比较就行,需要注意的是,字典序最小,需要用到sort排序进行处理。

#include <bits/stdc++.h>
#define inf 1000000007
typedef long long ll;
using namespace std;
char a[700];
string ans[36]=
{
    "aliceisbluebobisgreenyazidisred","aliceisbluebobisredyazidisgreen","aliceisgreenbobisblueyazidisred","aliceisgreenbobisredyazidisblue","aliceisredbobisblueyazidisgreen","aliceisredbobisgreenyazidisblue",
    "aliceisblueyazidisgreenbobisred","aliceisblueyazidisredbobisgreen","aliceisgreenyazidisbluebobisred","aliceisgreenyazidisredbobisblue","aliceisredyazidisbluebobisgreen","aliceisredyazidisgreenbobisblue",
    "bobisbluealiceisgreenyazidisred","bobisbluealiceisredyazidisgreen","bobisgreenaliceisblueyazidisred","bobisgreenaliceisredyazidisblue","bobisredaliceisblueyazidisgreen","bobisredaliceisgreenyazidisblue",
    "bobisblueyazidisgreenaliceisred","bobisblueyazidisredaliceisgreen","bobisgreenyazidisbluealiceisred","bobisgreenyazidisredaliceisblue","bobisredyazidisbluealiceisgreen","bobisredyazidisgreenaliceisblue",
    "yazidisbluealiceisgreenbobisred","yazidisbluealiceisredbobisgreen","yazidisgreenaliceisbluebobisred","yazidisgreenaliceisredbobisblue","yazidisredaliceisbluebobisgreen","yazidisredaliceisgreenbobisblue",
    "yazidisbluebobisgreenaliceisred","yazidisbluebobisredaliceisgreen","yazidisgreenbobisbluealiceisred","yazidisgreenbobisredaliceisblue","yazidisredbobisbluealiceisgreen","yazidisredbobisgreenaliceisblue"
};
string ans1[36]=
{
    "Alice is blue.Bob is green.Yazid is red.","Alice is blue.Bob is red.Yazid is green.","Alice is green.Bob is blue.Yazid is red.","Alice is green.Bob is red.Yazid is blue.","Alice is red.Bob is blue.Yazid is green.","Alice is red.Bob is green.Yazid is blue.",
    "Alice is blue.Yazid is green.Bob is red.","Alice is blue.Yazid is red.Bob is green.","Alice is green.Yazid is blue.Bob is red.","Alice is green.Yazid is red.Bob is blue.","Alice is red.Yazid is blue.Bob is green.","Alice is red.Yazid is green.Bob is blue.",
    "Bob is blue.Alice is green.Yazid is red.","Bob is blue.Alice is red.Yazid is green.","Bob is green.Alice is blue.Yazid is red.","Bob is green.Alice is red.Yazid is blue.","Bob is red.Alice is blue.Yazid is green.","Bob is red.Alice is green.Yazid is blue.",
    "Bob is blue.Yazid is green.Alice is red.","Bob is blue.Yazid is red.Alice is green.","Bob is green.Yazid is blue.Alice is red.","Bob is green.Yazid is red.Alice is blue.","Bob is red.Yazid is blue.Alice is green.","Bob is red.Yazid is green.Alice is blue.",
    "Yazid is blue.Alice is green.Bob is red.","Yazid is blue.Alice is red.Bob is green.","Yazid is green.Alice is blue.Bob is red.","Yazid is green.Alice is red.Bob is blue.","Yazid is red.Alice is blue.Bob is green.","Yazid is red.Alice is green.Bob is blue.",
    "Yazid is blue.Bob is green.Alice is red.","Yazid is blue.Bob is red.Alice is green.","Yazid is green.Bob is blue.Alice is red.","Yazid is green.Bob is red.Alice is blue.","Yazid is red.Bob is blue.Alice is green.","Yazid is red.Bob is green.Alice is blue."
};
 
int main()
{
    int t;
    scanf("%d",&t);
    sort(ans,ans+36);//就是这了,之前字典序排列不对,白白WA了3次
    sort(ans1,ans1+36);
    while(t--)
    {
        memset(a,0,sizeof(a));
        scanf("%s",a);
        int flag=0;
        for(int i=0; i<36; i++)
        {
            int start=0;
            int j;
            for(j=0; j<ans[i].size(); j++)
            {
                flag=0;
                for(int k=start; k<strlen(a); k++)
                {
                    if(a[k]==ans[i][j])
                    {
                        start=k+1;
                        flag=1;
                        break;
                    }
                }
                if(flag==0) break;
            }
            if(j==ans[i].size()) {cout<<ans1[i]<<endl;flag=1;break;}
        }
        if(flag==0) cout<<"No solution."<<endl;
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值