全排列+子序列Color

Posted osea

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了全排列+子序列Color相关的知识,希望对你有一定的参考价值。

【题意】

  这个题目就是问,是否存在每个人对应每一种颜色,如果存在则输出字典序最小的。

  否则输出-1

【题解】

  利用next_permutation来构造36种情况。记住最后还需要排序一遍。

  然后用子序列判断是否存在。while写即可。

 

技术图片
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 string Ans[40] ;
 4 string T[40] ;
 5 string Name[3] = "Alice","Bob","Yazid";
 6 string name[3] = "alice" ,"bob","yazid";
 7 string Color[3] = "red","blue","green";
 8 string str;
 9 
10 int cnt = 0 ;
11 
12 void Init()
13     int N_idx[3] = 0,1,2;
14     int C_idx[3] = 0,1,2;
15 
16     do
17         do
18             for(int i=0;i<3;i++)
19                 T[cnt] += name[N_idx[i]] + "is" + Color[C_idx[i]] ;
20             for(int i=0;i<3;i++)
21                 Ans[cnt] += Name[N_idx[i]] + " is " + Color[C_idx[i]] + ".";
22             cnt ++ ;
23         while(next_permutation(C_idx,C_idx+3));
24     while( next_permutation(N_idx,N_idx+3));
25 
26 int main()
27 
28     ios_base :: sync_with_stdio(false);
29     cin.tie(NULL) , cout.tie(NULL) ;
30     Init();
31 
32     sort( T , T + 36 );
33     sort( Ans , Ans + 36 );
34 
35     //cout << T[0].length() << endl;
36 
37 /*
38     for( auto x : Ans )
39         cout << x << endl;
40     
41 */
42 
43     int kase ;
44     cin >> kase ;
45     while( kase -- )
46         cin >> str;
47         int len = str.length() ;
48         int i , j , k ;
49         for(k = 0 ; k < 36 ; k++ )
50             i = j = 0 ;
51             while( i < 31 && j < len )
52                 if( T[k][i] == str[j] ) i++ ;
53                 j ++ ;
54             
55             if( i == 31 )
56                 break;
57             
58         
59         if( k == 36 )
60             cout << "No solution." << endl;
61         else
62             cout << Ans[k] << endl;
63         
64     
65     return 0 ;
66 
67 /*
68 4
69 aliceisredbobisblueyazidisgreen
70 aliceisgreenbobisgreenyazidisgreen
71 aliceisyellowbobisblueyazidisgreen
72 xxyazidxxisxxgreenxxbobisblueaxlxixcxexixsxrxexdx
73 */
View Code

 

以上是关于全排列+子序列Color的主要内容,如果未能解决你的问题,请参考以下文章

来咯老弟!拔,全排列+组合 = “排列“子序列问题求解

来咯老弟!拔,全排列+组合 = “排列“子序列问题求解

你真的分清楚子序列和全排列了吗?建议收藏

求n个数的全排列,n不定。用c语言。用于银行家算法中求安全序列

力扣:全排列(回溯算法)

poj3421 X-factor Chains(重复元素的全排列)