NC207977. 找规律
描述
输入描述
多组输入,每个文件不超过1000组第一行,输入任意牌序,用空格隔开(不重复、不缺少)第二行,输入两次洗牌后的牌序,用空格隔开
输出描述
一行,洗牌五次后的牌序,用空格隔开
示例1
输入:
A 2 3 4 5 6 7 8 9 10 J Q K 10 9 Q 8 K 3 4 A 5 J 6 2 7 A Q 6 J 4 K 9 10 7 3 5 8 2 8 7 A Q 9 5 K 10 2 6 3 J 4
输出:
K J A 9 3 8 2 5 6 7 4 10 Q 5 A K 6 Q 2 7 10 8 9 4 3 J
C++14(g++5.4) 解法, 执行用时: 18ms, 内存消耗: 736K, 提交时间: 2020-06-28 22:45:25
#include<bits/stdc++.h> using namespace std; string s[30]; string t[30]; int a[30]; void init_a(){ for(int i=0;i<13;i++){ for(int j=0;j<13;j++){ if(s[i] == t[j]){ a[i] = j; break; } } } } void sol(){ for(int i=0;i<13;i++){ t[a[i]] = s[i]; } for(int i=0;i<13;i++){ s[i] = t[i]; } } int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); //freopen("in.txt","r",stdin); while(cin>>s[0]){ for(int i=1;i<13;i++) cin>>s[i]; for(int i=0;i<13;i++) cin>>t[i]; init_a(); for(int i=0;i<9;i++) sol(); for(int i=0;i<13;i++) cout<<s[i]<<" "; cout<<endl; //cout<<"end"<<endl; } return 0; }
C++(g++ 7.5.0) 解法, 执行用时: 19ms, 内存消耗: 544K, 提交时间: 2023-03-28 20:14:42
#include<bits/stdc++.h> using namespace std; const int N=13; string a[N],b[N],c[N]; signed main() { while(cin>>a[0]) { map<string,string> mp; for(int i=1;i<13;i++)cin>>a[i]; for(int i=0;i<13;i++)cin>>b[i],mp[a[i]]=b[i]; for(int i=0;i<9;i++) { for(int j=0;j<13;j++) { a[j]=mp[a[j]]; c[j]=a[j]; } } for(int j=0;j<13;j++)cout<<a[j]<<' '; cout<<'\n'; } }
C++11(clang++ 3.9) 解法, 执行用时: 23ms, 内存消耗: 540K, 提交时间: 2020-07-09 15:45:36
#include<bits/stdc++.h> using namespace std; int main() { string s[13],t[13]; while(cin>>s[0]){ map<string,string>mp; for(int i=1;i<=12;i++) cin>>s[i]; for(int i=0;i<13;i++){ cin>>t[i]; mp[s[i]]=t[i]; } for(int i=0;i<9;i++){ for(int j=0;j<13;j++){ s[j]=mp[s[j]]; } } for(int i=0;i<13;i++) cout<<s[i]<<' '; cout<<endl; } return 0; }