From 8ccec85eb6278d61e421a81101d965c55742e958 Mon Sep 17 00:00:00 2001 From: Konstantin Saveljev Date: Sat, 18 Jun 2011 23:35:04 +0300 Subject: [PATCH] 647 solved --- 647.cpp | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 647.cpp diff --git a/647.cpp b/647.cpp new file mode 100644 index 0000000..d556ea8 --- /dev/null +++ b/647.cpp @@ -0,0 +1,97 @@ +#include +#include +#include +using namespace std; + +int main(void) { + int n, a, b; + int players[6]; + bool miss[6]; + int throws[1001]; + map ladder; + map extra; + + n = 0; + while (cin >> throws[n]) { + if (throws[n] == 0) + break; + + n++; + } + + while (cin >> n) { + if (!n) + break; + + ladder.clear(); + extra.clear(); + + while (cin >> a >> b) { + if (!a && !b) + break; + + ladder[a] = b; + } + + while (cin >> a) { + if (a == 0) + break; + + extra[abs(a)] = a; + } + + int winner; + int cur_player = 0; + for (int i = 0; i < 6; i++) { + miss[i] = false; + players[i] = 0; + } + int cur_throw = 0; + + while (true) { + if (miss[cur_player]) { + miss[cur_player] = false; + cur_player++; + if (cur_player >= n) + cur_player = 0; + continue; + } + + if (players[cur_player] + throws[cur_throw] > 100) { + cur_throw++; + cur_player++; + continue; + } else if (players[cur_player] + throws[cur_throw] == 100) { + winner = cur_player + 1; + break; + } + + players[cur_player] += throws[cur_throw]; + cur_throw++; + + if (ladder.find(players[cur_player]) != ladder.end()) { + players[cur_player] = ladder[players[cur_player]]; + if (players[cur_player] == 100) { + winner = cur_player + 1; + break; + } + } + + if (extra.find(players[cur_player]) != extra.end()) { + if (extra[players[cur_player]] < 0) { + miss[cur_player] = true; + } else { + cur_player--; + } + } + + cur_player++; + if (cur_player >= n) + cur_player = 0; + } + + cout << winner << endl; + } + + return 0; +}