TopCoder SRM 500 DIV2
Rating: 859→843(灰)
下がったーまあ当然ですね…
167.26 Points
250: SRMCards
愚直に問題文の定義の通り実装してしまった…
167.26 Points
#include <iostream> #include <sstream> #include <string> #include <vector> #include <algorithm> using namespace std; class SRMCards { public: inline int exists(int x, int sz){ return 0 <= x && x < sz; } int maxTurns(vector <int> cards) { sort(cards.begin(), cards.end()); int turn = 0; while(!cards.empty()){ vector<int> v(cards.size(), 0); for(int i = 0; i < cards.size(); i++){ if(exists(i - 1, cards.size())){ if(cards[i - 1] == cards[i] - 1) v[i]++; } if(exists(i + 1, cards.size())){ if(cards[i + 1] == cards[i] + 1) v[i]++; } } vector<int> w; for(int i = 0; i < v.size(); i++){ if(v[i] == 0){ w.push_back(cards[i]); } } if(w.size()){ for(int i = 0; i < w.size(); i++){ cards.erase(remove(cards.begin(), cards.end(), w[i]), cards.end()); turn++; } continue; } for(int i = 0; i < v.size(); i++){ if(v[i] > 0){ cards.erase(remove(cards.begin(), cards.end(), cards[i] - 1), cards.end()); cards.erase(remove(cards.begin(), cards.end(), cards[i] + 1), cards.end()); cards.erase(remove(cards.begin(), cards.end(), cards[i]), cards.end()); turn++; break; } } } return turn; } };
500:
1000:
分からない。とくに500