求助QAQ,谁能帮我A我发一下链接
// https://ghostbin.com/fQdYm
#include <bits/stdc++.h>
using namespace std;
const string result[] = {"", "Win ", "Loss", "Draw"};
set<pair<vector<int>, vector<vector<int> > > > path;
vector<int> cards;
vector<vector<int> > pile;
int ans;
void init() {
path.clear();
vector<int>().swap(cards);
vector<vector<int> >(7).swap(pile);
ans = 7;
}
int pending() {
bool win = 1;
for (int i = 0; i < 7; i++) win &= (pile[i].empty());
if (win) return 1;
if (cards.empty()) return 2;
if (path.find(make_pair(cards, pile)) != path.end()) return 3;
path.insert(make_pair(cards, pile));
return 0;
}
bool check(int x) {
if ((x == 10) || (x == 20) || (x == 30)) return 1;
return 0;
}
void insert(vector<int> &ins) {
ins.push_back(cards[0]);
cards.erase(cards.begin());
bool sgn;
do {
sgn = true;
while (ins.size() >= 3 && check(ins[0] + ins[1] + ins.back())) {
cards.push_back(ins[0]);
cards.push_back(ins[1]);
cards.push_back(ins.back());
ins.erase(ins.begin());
ins.erase(ins.begin());
ins.pop_back();
sgn = false;
}
while (ins.size() >= 3 && check(ins[0] + ins[ins.size() - 2] + ins.back())) {
cards.push_back(ins[0]);
cards.push_back(ins[ins.size() - 2]);
cards.push_back(ins.back());
ins.erase(ins.begin());
ins.pop_back();
ins.pop_back();
sgn = false;
}
while (ins.size() >= 3 && check(ins[ins.size() - 3] + ins[ins.size() - 2] + ins.back())) {
cards.push_back(ins[ins.size() - 3]);
cards.push_back(ins[ins.size() - 2]);
cards.push_back(ins.back());
ins.pop_back();
ins.pop_back();
ins.pop_back();
sgn = false;
}
} while (!sgn);
}
bool solve() {
int x;
scanf("%d", &x);
if (!x) return 0;
cards.push_back(x);
for (int i = 0; i < 51; i++) {
scanf("%d", &x);
cards.push_back(x);
}
for (int i = 0; i < 7; i++) {
pile[i].push_back(cards[0]);
cards.erase(cards.begin());
path.insert(make_pair(cards, pile));
}
int status, pos = -1;
do {
while (pile[++pos % 7].empty());
insert(pile[pos % 7]);
ans++;
} while (!(status = pending()));
printf("%s: %d\n", result[status].c_str(), ans);
return 1;
}
int main() {
//freopen("uva_output.txt", "w", stdout);
do init(); while (solve());
return 0;
}