QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#608321 | #7061. Poker Game | tkt0506 | WA | 1ms | 3844kb | C++14 | 9.0kb | 2024-10-03 20:40:09 | 2024-10-03 20:40:09 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
int suit(int a){
return (a-1)/13;
}
int Rank(int a){
if(a%13 == 1)return 13;
else return (a-1)%13;
}
// Detect values
int isPair(vector<int>hand, vector<int>comm){ // same pair?
vector<int>cnt(14,0);
for(int e : hand)cnt[Rank(e)]++;
for(int e : comm)cnt[Rank(e)]++;
for(int i=13; i>=0; i--)if(cnt[i]>=2)return i;
return 0;
}
int isThree(vector<int>hand, vector<int>comm){
vector<int>cnt(14,0);
for(int e : hand)cnt[Rank(e)]++;
for(int e : comm)cnt[Rank(e)]++;
for(int i=13; i>=0; i--)if(cnt[i]>=3)return i;
return 0;
}
int isFlush(vector<int>hand, vector<int>comm){
vector<int>cnt(4,0);
for(int e : hand)cnt[suit(e)]++;
for(int e : comm)cnt[suit(e)]++;
int mx = 0;
for(int i=0; i<4; i++){
if(cnt[i]>=5){
for(int e : hand)if(suit(e)==i)mx = max(mx, Rank(e));
for(int e : comm)if(suit(e)==i)mx = max(mx, Rank(e));
}
}
return mx;
}
int isStraight(vector<int>hand, vector<int>comm){
vector<int>cnt(14,0);
for(int e : hand)cnt[Rank(e)]++;
for(int e : comm)cnt[Rank(e)]++;
int mx = 0;
for(int i=1; i+4<=13; i++){
bool flag = (cnt[i]>=1);
for(int j=i+1; j<=i+4; j++)flag &= (cnt[j]>=1);
if(flag)mx = max(mx, i+4);
}
if(cnt[13] && cnt[1] && cnt[2] && cnt[3] && cnt[4])mx = max(mx, 4);
return mx;
}
int isStraightFlush(vector<int>hand, vector<int>comm){
vector<int>cnt(54,0);
for(int e : hand)cnt[e]++;
for(int e : comm)cnt[e]++;
int mx = 0;
for(int i=0; i<4; i++){
bool flag = 1;
for(int j=i*13+1; j<=i*13+5; j++)if(!cnt[j])flag = 0;
if(flag)return 13;
}
return mx;
}
int needFlush(vector<int>hand, vector<int>comm){
vector<int>cnt(4,0), cnt2(4,0);
for(int e : hand)cnt[suit(e)]++;
for(int e : comm)cnt[suit(e)]++;
int mx = 5;
for(int i=0; i<4; i++)mx = min(mx, 5-cnt[i]);
return mx;
}
int needStraight(vector<int>hand, vector<int>comm){
vector<int>cnt(14,0);
for(int e : hand)cnt[Rank(e)]++;
for(int e : comm)cnt[Rank(e)]++;
int mx = 5;
for(int i=1; i+4<=13; i++){
int tot = 0;
for(int j=i; j<=i+4; j++)if(cnt[j])tot++;
mx = min(mx, 5-tot);
}
int tot = 0;
if(cnt[13])tot++;
if(cnt[1])tot++;
if(cnt[2])tot++;
if(cnt[3])tot++;
if(cnt[4])tot++;
mx = min(mx, 5-tot);
return mx;
}
// Strategy 1
int playA(int pot, vector<int>hand, vector<int>comm, vector<int>hole, int round){
if(round == 1){
if(pot < 15 || (suit(hand[0]) != suit(hand[1])))return 0;
return min(pot,5);
}
if(round == 2){
return 5;
}
if(round == 3){
if(isPair(hand, comm) || isThree(hand, comm) || isFlush(hand, comm) || isStraight(hand,comm) || isStraightFlush(hand,comm))return min(pot, 5);
return 0;
}
}
// Strategy 2
int playB(int pot, vector<int>hand, vector<int>comm, vector<int>hole, int round){
if(round == 1){
if(pot >= 15)return 5;
if(Rank(hand[0]) == 13 && Rank(hand[1]) == 13)return pot;
return 0;
}
if(round == 2){
if(isPair(hand, comm) || isThree(hand, comm) || isFlush(hand, comm) || isStraight(hand,comm) || isStraightFlush(hand,comm))return min(pot, 5);
if(needFlush(hand, comm) <= 1 || needStraight(hand,comm) <= 1)return min(pot, 5);
return 0;
}
if(round == 3){
vector<int>cnt(4,0);
for(int e : comm)cnt[suit(e)]++;
for(int i=0; i<4; i++)if(cnt[i] >= 4)return 0;
return min(pot, 5);
}
}
// Strategy 3
int playC(int pot, vector<int>hand, vector<int>comm, vector<int>hole, int round){
if(round == 1){
if(Rank(hand[0]) == 13 || Rank(hand[1]) == 13 || abs(Rank(hand[0])%13-Rank(hand[1])%13) < 3){
if(pot >= 15)return 5;
else return pot;
}
return 0;
}
if(round ==2){
vector<int>cnt(14,0);
for(int e : comm)cnt[Rank(e)]++;
for(int i=1; i<=13; i++){
if(cnt[i] >= 2){
bool flag = 0;
for(int e : hand)if(Rank(e) == i)flag = 1;
if(!flag)return 0;
}
}
return min(pot,5);
}
if(round == 3)return min(pot, 5);
}
// Strategy 4
int playD(int pot, vector<int>hand, vector<int>comm, vector<int>hole, int round){
if(round == 1){
for(int e : hand)if(Rank(e) > 10){
if(pot >= 15)return 5;
else return pot;
}
return 0;
}
if(round == 2){
int mx = 0;
for(int e : hand)mx = max(mx, Rank(e));
int mx2 = 0;
for(int e : comm)mx2 = max(mx2, Rank(e));
// cout << mx << " " << mx2 << "\n";
if(mx > mx2)return min(pot, 5);
for(int e : hand)if(Rank(e) == mx2)return min(pot,5);
return 0;
}
if(round == 3){
if(isThree(hand, comm) || isFlush(hand, comm) || isStraight(hand,comm) || isStraightFlush(hand,comm))return min(pot, 5);
vector<int>tmp;
for(int e : comm)tmp.push_back(Rank(e));
sort(tmp.begin(), tmp.end());
if(isPair(hand, comm) > tmp[2])return min(pot, 5);
return 0;
}
}
// Strategy 5
int playE(int pot, vector<int>hand, vector<int>comm, vector<int>hole, int round, int ppl){
if(round == 1){
if(ppl==2){
if(pot >= 15)return 5;
else return pot;
}
else return 0;
}
return min(pot,5);
}
vector<bool>isFold(5,0), isAllin(5,0);
vector<int>coin(5,100);
vector<int>Hand[5], Comm;
int Ppl = 5, win = 0;
void play(int a, int r){
if(isFold[a] || isAllin[a])return ;
int v;
if(a==0)v = playA(coin[0], Hand[0], Comm, {},r);
else if(a==1)v = playB(coin[1], Hand[1], Comm, {},r);
else if(a==2)v = playC(coin[2], Hand[2], Comm, {},r);
else if(a==3)v = playD(coin[3], Hand[3], Comm, {},r);
else v = playE(coin[4], Hand[4], Comm, {},r, Ppl);
win += v;
// cout << "PLAY: " << a << " " << v << "\n";
coin[a] -= v;
if(v==0){
isFold[a] = 1;
Ppl--;
}else{
if(coin[a] == 0)isAllin[a] = 1;
}
}
typedef pair<int,int> pii;
pii calc(int a){
if(isStraightFlush(Hand[a],Comm))return {6,13};
if(isFlush(Hand[a],Comm))return {5,isFlush(Hand[a],Comm)};
if(isStraight(Hand[a],Comm))return {4,isStraight(Hand[a],Comm)};
if(isThree(Hand[a],Comm))return {3,isThree(Hand[a],Comm)};
if(isPair(Hand[a],Comm))return {2,isPair(Hand[a],Comm)};
int mx = 0;
for(int e : Hand[a])mx = max(mx, Rank(e));
return {1,mx};
}
int main(){
int n;
cin >> n;
while(n--){
// for(int e : coin)cout << e << ' ';
//cout << "\n";
//cout << "\nNEW ROUND\n";
Comm.clear();
Ppl = 5;
win = 0;
for(int i=0; i<5; i++){
Hand[i].clear();
isFold[i] = isAllin[i] = 0;
}
vector<int>a(15);
for(int i=0; i<15; i++)cin >> a[i];
//for(int i=0; i<15; i++)cout << Rank(a[i])+1 << " " << suit(a[i]) << "\n";
// cout << "\n";
int idx = 0;
for(int i=0; i<5; i++){
if(!coin[i]){
Ppl--;
isFold[i] = 1;
continue;
}
Hand[i].push_back(a[idx]);
Hand[i].push_back(a[idx+1]);
idx += 2;
}
// round 1
bool endFlag = 0;
for(int i=0; i<5; i++){
if(Ppl == 1 && !isFold[i]){
coin[i] += win;
endFlag = 1;
break;
}
play(i,1);
}
if(endFlag)continue;
// round 2
Comm.push_back(a[idx]);
Comm.push_back(a[idx+1]);
Comm.push_back(a[idx+2]);
idx += 3;
for(int i=0; i<5; i++){
if(Ppl == 1 && !isFold[i]){
coin[i] += win;
endFlag = 1;
break;
}
play(i,2);
}
if(endFlag)continue;
// round 3
Comm.push_back(a[idx]);
Comm.push_back(a[idx+1]);
for(int i=0; i<5; i++){
if(Ppl == 1 && !isFold[i]){
coin[i] += win;
endFlag = 1;
break;
}
play(i,3);
}
if(endFlag)continue;
// final battle
int idx2 = -1, scr = 0, scr2 = 0;
for(int i=0; i<5; i++){
if(isFold[i])continue;
pii res = calc(i);
if(res.first > scr || (res.first == scr && res.second >= scr2)){
idx2 = i;
scr = res.first;
scr2 = res.second;
}
}
// cout << "WIN: " << idx2 << "\n";
coin[idx2] += win;
}
for(int e : coin)cout << e << "\n";
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3716kb
input:
2 1 2 8 10 3 11 15 12 14 27 42 43 45 48 13 14 2 8 10 3 11 5 23 1 27 42 43 13 45 48
output:
90 90 100 115 105
result:
ok 5 lines
Test #2:
score: 0
Accepted
time: 0ms
memory: 3620kb
input:
5 9 5 19 35 30 42 18 8 21 51 16 26 32 29 49 17 50 13 7 37 21 25 31 28 18 30 27 24 16 15 31 38 52 46 1 29 41 12 39 24 10 45 13 22 42 8 10 33 18 39 49 29 43 51 2 35 19 27 41 12 48 13 33 39 30 47 32 24 12 9 42 1 18 41 51
output:
65 115 115 100 105
result:
ok 5 lines
Test #3:
score: 0
Accepted
time: 0ms
memory: 3612kb
input:
5 51 31 17 50 24 15 25 20 22 16 44 6 19 39 28 34 1 21 10 31 15 35 8 27 51 32 23 48 24 29 39 18 27 14 31 2 35 51 44 21 24 6 43 16 19 9 44 4 19 35 47 15 51 25 20 40 8 21 6 7 49 35 11 12 44 29 22 9 16 13 4 17 32 25 7
output:
100 125 115 75 85
result:
ok 5 lines
Test #4:
score: 0
Accepted
time: 0ms
memory: 3564kb
input:
5 16 41 30 6 5 39 22 1 29 42 32 49 40 27 21 39 14 32 48 6 37 23 35 13 52 43 2 24 38 45 49 42 38 18 47 52 30 15 16 1 26 31 28 6 40 47 31 22 45 49 46 36 17 35 48 38 33 13 16 20 41 17 9 34 25 21 8 18 22 24 4 20 26 15 42
output:
90 80 100 115 115
result:
ok 5 lines
Test #5:
score: 0
Accepted
time: 0ms
memory: 3548kb
input:
5 26 38 46 4 52 15 51 7 1 30 5 3 33 47 34 22 7 15 9 5 29 32 23 30 25 33 2 1 50 4 22 44 31 33 32 39 26 5 21 15 48 2 52 37 13 21 50 12 7 43 26 32 28 42 30 20 9 35 47 8 38 12 4 33 10 25 50 37 46 36 6 40 29 48 5
output:
100 65 100 120 115
result:
ok 5 lines
Test #6:
score: 0
Accepted
time: 0ms
memory: 3588kb
input:
5 32 51 43 23 30 17 36 37 48 22 46 41 20 1 42 49 29 40 4 19 46 13 39 8 12 47 38 16 32 34 37 34 45 36 10 26 33 21 46 35 39 13 41 27 19 51 15 42 35 27 52 18 1 44 37 26 39 33 32 8 31 50 52 24 37 17 26 2 20 13 1 38 9 49 51
output:
85 105 110 100 100
result:
ok 5 lines
Test #7:
score: 0
Accepted
time: 1ms
memory: 3760kb
input:
50 13 27 25 40 35 8 4 48 24 21 23 41 28 34 46 17 24 35 47 44 39 23 51 41 26 9 8 11 25 6 46 2 15 10 45 1 32 29 4 47 14 35 49 16 22 30 43 11 47 42 28 17 39 18 15 24 5 22 12 7 7 32 43 36 17 3 1 12 34 27 35 16 29 22 45 42 38 8 45 37 22 50 33 31 49 28 20 17 40 15 17 10 30 39 18 48 32 4 26 13 27 22 3 2 8 ...
output:
25 0 110 205 160
result:
ok 5 lines
Test #8:
score: 0
Accepted
time: 1ms
memory: 3624kb
input:
50 23 24 41 38 31 36 34 2 39 37 47 43 35 3 32 9 4 29 18 35 23 40 43 41 52 45 48 25 37 28 3 37 25 2 16 44 1 31 23 42 22 40 48 30 6 39 38 46 20 9 18 37 42 29 17 21 23 7 50 12 43 12 19 21 31 22 38 5 2 36 45 17 18 51 13 29 52 39 31 16 21 9 15 4 48 43 41 24 20 30 28 50 51 17 10 41 40 48 13 45 24 18 11 43...
output:
30 10 170 135 155
result:
ok 5 lines
Test #9:
score: 0
Accepted
time: 1ms
memory: 3828kb
input:
50 29 37 4 16 38 19 24 34 21 11 26 48 3 39 35 26 10 13 49 9 12 14 1 2 28 11 43 47 18 19 30 43 40 29 12 22 46 6 36 35 20 2 32 23 45 51 27 39 10 2 24 52 14 7 4 38 36 25 47 21 36 19 2 3 45 47 44 5 51 30 49 35 46 6 11 32 37 30 12 34 13 45 35 42 41 8 52 16 27 2 38 30 12 13 28 19 31 26 36 5 51 34 35 41 25...
output:
10 130 25 215 120
result:
ok 5 lines
Test #10:
score: 0
Accepted
time: 1ms
memory: 3844kb
input:
50 52 16 47 32 18 9 10 29 48 22 28 36 14 6 20 49 11 33 23 40 10 31 20 46 5 38 48 13 44 50 25 15 35 47 33 41 32 9 7 24 10 11 17 21 23 8 50 24 43 28 47 13 44 29 2 17 30 5 7 18 30 8 10 5 20 33 14 25 24 37 17 9 23 41 35 26 35 51 43 8 3 50 32 33 37 52 23 19 1 42 41 33 6 19 47 17 36 49 18 27 32 48 29 50 1...
output:
20 10 180 120 170
result:
ok 5 lines
Test #11:
score: 0
Accepted
time: 1ms
memory: 3612kb
input:
50 13 49 39 9 33 12 32 20 37 8 48 42 3 26 17 34 30 13 39 17 23 51 24 41 31 47 28 52 25 50 29 26 40 31 14 47 51 35 36 13 42 52 5 17 46 12 3 51 43 47 41 35 42 15 39 49 25 6 50 1 38 45 52 4 40 44 17 36 2 5 25 18 32 23 1 25 22 18 37 35 49 32 8 10 30 11 46 15 29 47 31 41 18 4 8 24 1 47 9 40 27 37 26 34 2...
output:
165 160 90 85 0
result:
ok 5 lines
Test #12:
score: 0
Accepted
time: 1ms
memory: 3540kb
input:
100 40 49 2 41 4 1 10 13 37 8 36 42 19 14 38 5 28 40 23 25 29 12 46 27 38 49 19 6 33 7 16 50 8 46 40 5 51 21 25 1 19 45 6 30 31 9 40 37 4 41 47 26 16 3 32 35 44 7 27 52 16 38 20 36 19 31 5 51 25 18 43 6 22 3 33 47 10 16 26 30 14 24 22 51 32 34 52 17 23 8 27 16 48 22 17 6 25 46 50 38 47 15 28 20 4 25...
output:
95 10 135 75 185
result:
ok 5 lines
Test #13:
score: 0
Accepted
time: 1ms
memory: 3548kb
input:
100 7 44 43 37 47 49 8 25 22 5 40 35 18 33 41 28 16 14 30 24 27 11 41 6 23 33 12 39 50 13 26 30 10 4 32 45 15 52 46 51 39 40 7 47 17 12 43 38 26 9 44 51 11 16 23 32 21 27 15 37 50 4 22 1 37 25 24 49 26 28 9 39 7 14 17 43 10 39 45 36 9 37 28 46 6 3 25 8 51 34 12 38 35 17 42 30 37 44 48 33 47 28 5 36 ...
output:
130 10 160 150 50
result:
ok 5 lines
Test #14:
score: 0
Accepted
time: 1ms
memory: 3624kb
input:
100 20 18 36 15 1 52 30 16 13 48 37 8 11 38 42 26 31 35 14 50 21 46 27 38 32 52 41 12 25 28 36 26 23 18 38 43 21 15 3 52 29 12 41 24 8 7 20 24 10 21 47 30 41 29 3 45 16 4 8 18 43 11 40 22 45 51 39 52 15 26 12 34 14 28 25 31 36 27 4 6 9 19 49 26 12 2 21 7 42 32 12 15 52 1 49 21 6 13 19 37 7 50 33 3 2...
output:
10 145 20 165 160
result:
ok 5 lines
Test #15:
score: 0
Accepted
time: 1ms
memory: 3636kb
input:
100 37 36 49 23 34 22 51 31 48 26 21 25 6 44 33 2 32 3 35 11 18 40 46 47 26 45 7 44 13 8 28 45 26 34 50 6 2 11 40 3 13 10 32 47 44 6 51 39 20 38 43 37 34 49 40 52 28 27 36 5 39 23 46 37 50 45 43 24 20 5 36 41 8 32 30 26 2 39 40 1 24 21 31 11 49 12 23 9 3 20 38 46 17 47 13 25 30 36 48 14 40 32 43 8 4...
output:
140 10 155 30 165
result:
ok 5 lines
Test #16:
score: 0
Accepted
time: 1ms
memory: 3564kb
input:
100 1 46 18 40 7 44 51 27 41 48 14 33 32 11 2 27 30 5 15 28 1 42 17 33 3 26 22 51 23 11 47 43 38 52 17 48 33 2 1 28 46 24 27 36 41 3 43 17 40 32 50 38 23 5 33 35 10 7 41 8 33 44 26 35 8 10 31 47 3 32 36 1 51 17 49 21 15 29 12 4 2 43 51 31 36 45 49 33 9 32 33 21 7 6 47 27 26 37 30 8 22 12 41 44 50 15...
output:
10 10 100 220 160
result:
ok 5 lines
Test #17:
score: 0
Accepted
time: 1ms
memory: 3612kb
input:
48 41 31 16 6 15 24 1 50 10 19 13 44 4 20 18 45 39 24 51 43 1 44 35 17 29 49 19 13 23 52 41 4 21 29 38 16 45 15 27 37 44 24 25 9 31 38 32 27 51 19 21 11 6 30 10 49 14 13 24 35 44 20 38 9 40 3 11 47 25 23 19 52 12 15 41 41 34 25 30 52 44 29 47 35 38 22 3 9 28 46 18 1 10 25 19 37 41 46 31 44 47 30 52 ...
output:
5 10 125 205 155
result:
ok 5 lines
Test #18:
score: 0
Accepted
time: 0ms
memory: 3540kb
input:
90 7 29 39 34 14 41 44 21 50 11 36 26 35 10 13 45 34 1 3 28 41 50 39 48 36 16 19 46 10 25 14 17 41 9 27 28 20 43 6 42 15 21 1 5 7 50 34 40 13 15 7 26 16 2 5 21 11 24 30 3 8 46 15 20 34 38 32 9 1 39 44 4 51 12 7 36 24 49 48 23 17 33 38 41 19 26 9 7 5 22 48 30 16 47 43 33 5 2 49 45 9 19 50 29 15 18 8 ...
output:
200 5 0 155 140
result:
ok 5 lines
Test #19:
score: 0
Accepted
time: 0ms
memory: 3620kb
input:
26 19 31 43 8 27 37 47 35 44 9 22 51 41 11 5 51 10 15 34 22 8 38 27 16 3 19 35 49 17 26 34 52 49 42 36 10 35 31 29 17 23 22 27 28 40 10 5 52 43 13 20 37 35 49 19 42 4 41 23 11 43 42 39 29 15 33 52 12 6 46 8 11 2 51 36 45 1 22 17 40 29 41 37 20 15 43 49 31 32 47 50 5 48 40 42 11 23 37 2 44 14 4 29 19...
output:
185 10 70 90 145
result:
ok 5 lines
Test #20:
score: 0
Accepted
time: 0ms
memory: 3784kb
input:
10 1 10 27 51 39 12 29 9 47 15 30 25 32 42 41 5 14 46 44 29 45 24 51 1 39 7 8 16 31 35 51 24 37 50 36 7 41 35 2 48 45 31 3 6 21 39 26 6 51 24 50 35 42 7 28 23 36 15 31 16 29 20 39 12 17 52 38 37 28 14 10 2 18 25 22 28 38 6 17 44 13 14 10 41 49 2 29 51 21 15 17 31 1 51 39 36 20 5 21 42 26 2 19 16 50 ...
output:
145 105 105 85 60
result:
ok 5 lines
Test #21:
score: 0
Accepted
time: 1ms
memory: 3492kb
input:
46 14 12 31 23 5 25 6 33 48 32 37 46 27 26 11 21 4 47 52 22 40 18 25 39 24 1 15 26 34 13 26 36 41 10 4 13 6 11 3 21 7 31 17 49 24 24 44 25 8 29 37 4 42 19 36 15 47 14 46 52 7 40 31 29 51 19 17 2 38 16 5 8 33 32 34 14 48 25 31 6 29 13 35 43 38 26 21 50 10 36 20 33 6 2 51 8 44 34 5 40 38 50 36 35 17 4...
output:
85 60 85 170 100
result:
ok 5 lines
Test #22:
score: -100
Wrong Answer
time: 0ms
memory: 3540kb
input:
4 2 3 14 17 11 13 18 21 28 30 1 4 5 10 12 1 4 14 17 6 8 18 21 28 30 2 3 5 7 9 1 3 14 17 6 7 18 21 28 30 2 4 5 8 13 1 2 14 17 6 7 18 21 28 30 3 4 5 51 52
output:
205 55 40 100 100
result:
wrong answer 1st lines differ - expected: '165', found: '205'