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