NC50951. 占卜DIY
描述
输入描述
一共13行,为每堆牌的具体牌是什么(不区分花色只区分数字),每堆输入的顺序为从上到下。
为了便于读入,用0代表10,那么A,J,Q,K(大写)就不用说了吧。。。
输出描述
一共开了几对。
示例1
输入:
8 5 A A K 5 3 2 9 6 0 6 3 4 3 4 3 4 4 5 5 6 7 6 8 7 7 7 9 9 8 8 9 0 0 0 K J J J Q A Q K J Q 2 2 A K Q 2
输出:
9
说明:
注解:第一条命死后前12堆牌变成了这个样子:C++(g++ 7.5.0) 解法, 执行用时: 3ms, 内存消耗: 428K, 提交时间: 2023-07-16 16:48:05
#include<bits/stdc++.h> using namespace std; deque<long long>q[14]; long long cnt[14],ans; int main(){ for(register int i=1;i<=13;++i) for(register int j=1;j<=4;++j){ char x;cin>>x; if(x=='A')q[i].push_back(1); else if(x=='0')q[i].push_back(10); else if(x=='J')q[i].push_back(11); else if(x=='Q')q[i].push_back(12); else if(x=='K')q[i].push_back(13); else q[i].push_back(x-'0'); } while(q[13].size()){ long long x=q[13].front();q[13].pop_front(); while(x!=13){ long long y=q[x].back(),z=x; q[x].push_front(x),q[x].pop_back(),++cnt[x],x=y; if(cnt[z]==4)++ans; } } printf("%lld",ans); }
C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 460K, 提交时间: 2020-05-17 17:25:42
#include<bits/stdc++.h> using namespace std; const int N=14; vector<int>v[N]; int open[N]; int get(char c) { if(c=='A')return 1; else if(c>='2'&&c<='9')return c-'0'; else if(c=='0')return 10; else if(c=='J')return 11; else if(c=='Q')return 12; return 13; } int main() { for(int i=1;i<=13;i++) { for(int j=0;j<4;j++) { char op[2]; cin>>op; v[i].push_back(get(op[0])); } } for(int i=0;i<4;i++) { int t=v[13][i]; while(t!=13) { open[t]++; int r=v[t].back(); v[t].pop_back(); t=r; } } int res=0; for(int i=1;i<=13;i++) if(open[i]==4)res++; printf("%d\n",res); return 0; }
C++(clang++11) 解法, 执行用时: 4ms, 内存消耗: 380K, 提交时间: 2021-02-14 10:10:40
#include<iostream> using namespace std; int a[14]; char c[14][5]; inline int get(char c) { if (c>='1' && c<='9') return c-'0'; if (c=='0') return 10; if (c=='A') return 1; if (c=='J') return 11; if (c=='Q') return 12; return 13; } int main() { for (int i=1; i<14; i++) for (int j=4; j; j--) cin>>c[i][j]; for(int i=4,x; i; i--) { x=get(c[13][i]); while(x^13) a[x]++,x=get(c[x][a[x]]); } int ans=0; for (int i=1; i<13; i++) ans+=a[i]==4; cout<<ans; }