BestCoder Round #41 1001——ZCC loves straight flush
After losing all his chips when playing Texas Hold'em with Fsygd on the way to ZJOI2015, ZCC has just learned a black technology. Now ZCC is able to change all cards as he wants during the game. ZCC wants to get a Straight Flush by changing as few cards as possible.
We call a five-card hand a Straight Flush when all five cards are consecutive and of the same suit. You are given a five-card hand. Please tell ZCC how many cards must be changed so as to get a Straight Flush.
Cards are represented by a letter('A', 'B', 'C', 'D') which denotes the suit and a number('1', '2', ⋯, '13') which denotes the rank.
Note that number '1' represents ace which is the largest actually. "1 2 3 4 5" and "10 11 12 13 1" are both considered to be consecutive while "11 12 13 1 2" is not.
First line contains a single integer T(T=1000) which denotes the number of test cases. For each test case, there are five short strings which denote the cards in a single line. It's guaranteed that all five cards are different.
For each test case, output a single line which is the answer.
3 A1 A2 A3 A4 A5 A1 A2 A3 A4 C5 A9 A10 C11 C12 C13
0 1 2
大意:要形成同花顺,问换掉的最少的牌的数目,,自己代码能力还是ruoruoruo,枚举每一种情况,再找在这种情况里面相同的牌的个数,res--,遍历所有情况的最少值就是答案
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[20],b[20],sa[20],sb[20];
void work()
{
int ans = 5;
for(int i = 'A'; i <= 'D'; i++){
for(int j = 1; j <= 10; j++){
for(int k = 1; k <= 5; k++){
sa[k] = i;
sb[k] = j + k - 1;
if(sb[k] == 14) sb[k] = 1;
}
int res = 5;
for(int k = 1; k <= 5; k++){
for(int l = 1; l <= 5; l++){
if(a[k] == sa[l] && b[k] == sb[l])
res--;
}
}
if(res < ans) ans = res;
}
}
printf("%d\n",ans);
}
int main()
{
int T;
scanf("%d",&T);
while(T--){
for(int i = 1; i <= 5; i++){
scanf(" %c%d",&a[i],&b[i]);
}
work();
}
return 0;
}

浙公网安备 33010602011771号