Topcoder SRM148 Div1 Level 1 CircleGame
問題
http://community.topcoder.com/stat?c=problem_statement&pm=1735&rd=4545
解法
0は飛び越えて,隣接する数の和が13になるものを0にしていく.
コード
#include <bits/stdc++.h> #include <stdint.h> #include <sys/time.h> class CircleGame { public: int cardsLeft(std::string deck) { int num[64]; int n = deck.size(); for(int i = 0; i < n; ++i) { switch( deck[i] ) { case 'A' : num[i] = 1; break; case '2' ... '9' : num[i] = deck[i] - '0'; break; case 'T' : num[i] = 10; break; case 'J' : num[i] = 11; break; case 'Q' : num[i] = 12; break; case 'K' : num[i] = 0; break; }; } for(int i = 0; i < n; ++i) { for(int left = 0; left < n; ++left) { if( num[left] != 0 ) { int right; for(right = (left + 1) % n; num[right] == 0; right = (right + 1) % n) ; if( num[left] + num[right] == 13 ) { num[left] = num[right] = 0; } } } } int res = 0; for(int i = 0; i < n; ++i) { if( num[i] != 0 ) { res += 1; } } return res; } };