SRM500 Div2Easy SRMCards
http://community.topcoder.com/stat?c=problem_statement&pm=11341
数字nを1つ選び、n±1とともに消す。消し終わるまでの最大手数を求める。
連続3数を消すとき、最適は真ん中を選んで消す1手だが、端を選ぶと2手になり、これが最大。なのでソートして端から消していくだけ。
#include <bits/stdc++.h> using namespace std; class SRMCards { public: int maxTurns( vector <int> cards ) { sort(cards.begin(),cards.end()); int ret=0; while(cards.size()){ ret++; int i=cards[0]; cards.erase(cards.begin()); if(cards.size()&&cards[0]==i+1){ cards.erase(cards.begin()); } } return ret; } };