SRMCards srm 500 div2 easy
問題と概要
http://www.topcoder.com/stat?c=problem_statement&pm=11341(note : topcoderのサイトにログインしてないと、見れないようです。)
いくつかの数字が書かれたカードがあって、そこからカードを任意の順番で引き抜く。あるカードを抜く時、そのカードの数字に隣接している数字を持つカードも抜かなければならない。なるべく長くこの手順を続けるには?という問題。
方針
まず、カードを数字に従って昇順に並べる。最小のカードから抜いていけば良い。最小のカードなので、その数字を n とする時、n - 1 のカードは存在しない。n + 1 のカードは存在するかもしれないので、チェック。
雑感
意味不明なバグが取れず30分も掛かってしまった。灰色に降格。
答案
#include <sstream> #include <string> #include <vector> #include <map> #include <algorithm> #include <iostream> #include <utility> #include <set> #include <cctype> #include <queue> #include <stack> #include <cstdio> #include <cstdlib> #include <cmath> #include <iterator> using namespace std; class SRMCards{ public: int maxTurns(vector <int> cards){ sort(cards.begin(), cards.end()); int ret = 0; int inc; for(int i = 0; i < (int)cards.size(); i += inc){ ret += 1; if( (i + 1) < (int)cards.size() && cards[i] + 1 == cards[i + 1] ) inc = 2; else inc = 1; } return ret; } }; // Powered by FileEdit // Powered by TZTester 1.01 [25-Feb-2003] // Powered by CodeProcessor