这是一种很奇怪的体验:代码居然一次就通过了,Oh,No。
个人不喜欢打牌,因此就模拟了一下,然后就,一次性通过了~~
不过,题目很简单的。还是觉得递归舒服~
AC
1 #include<iostream> 2 #include<vector> 3 #include<string> 4 5 using namespace std; 6 7 vector<char> A, B, T; 8 string a, b; 9 10 void print(vector<char> A) 11 { 12 for(int i=0;i<A.size();i++) 13 cout<<A.at(i); 14 cout<<‘\n‘; 15 T.clear(); 16 } 17 18 int bingo(vector<char> T) 19 { 20 int x = T.size(); 21 for(int i=0;i<T.size()-1;i++) 22 if(T.at(x-1) == T.at(i)) 23 return T.size() - i; 24 return 0; 25 } 26 27 void fun(vector<char> A, vector<char> B, char k) 28 { 29 if(A.size() == 0 || B.size() == 0){ 30 (A.size() == 0)?print(B):print(A); 31 return; 32 } 33 if(k == ‘A‘){ 34 T.push_back(A.at(0)); 35 A.erase(A.begin()); 36 int x = bingo(T); 37 int z = x; 38 if(x){ // A 赢了 39 int y = T.size(); 40 while(x--) A.push_back(T.at(--y)); 41 while(z--) T.erase(T.end()-1); 42 fun(A, B, ‘A‘); 43 } 44 else fun(A, B, ‘B‘); 45 } 46 if(k == ‘B‘){ 47 T.push_back(B.at(0)); 48 B.erase(B.begin()); 49 int x = bingo(T); 50 int z = x; 51 if(x){ // B 赢了 52 int y = T.size(); 53 while(x--) B.push_back(T.at(--y)); 54 while(z--) T.erase(T.end()-1); 55 fun(A, B, ‘B‘); 56 } 57 else fun(A, B, ‘A‘); 58 } 59 } 60 61 int main() 62 { 63 while(cin>>a>>b) 64 { 65 for(int i=0;i<a.size();i++) 66 A.push_back(a.at(i)); 67 for(int i=0;i<b.size();i++) 68 B.push_back(b.at(i)); 69 70 string c = a + b; 71 int t[100] = {0}, f = 1; 72 for(int i=0;i<c.size();i++) 73 t[(int)c.at(i)]++; 74 for(int i=48;i<100;i++) 75 if(t[i] >= 2) 76 f = 0; 77 if(f){ // A 和 B 没有共同的牌,此时无法结束 78 cout<<"-1"<<endl; 79 continue; 80 } 81 fun(A, B, ‘A‘); 82 A.clear(); 83 B.clear(); 84 } 85 86 getchar(); 87 88 return 0; 89 }
2019-02-15
17:32:12
原文:https://www.cnblogs.com/mabeyTang/p/10384883.html