JOI2007本選 問題2@C++

本選に向けて練習ちう。

最近Rubyばっか触っていたのでC++はお久しぶり状態。少し馴らさないとやばい。

#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;

int main(int argc, char *argv[], char *envp[])
{
	#ifdef DEBUG
	FILE *in = stdin;
	FILE *out = stdout;
	#else
	FILE *in = fopen("input.txt", "r");
	FILE *out = fopen("output.txt", "w");
	#endif
	int n;
	int k;
	fscanf(in, "%d %d\n", &n, &k);
	vector<int> cards(k);
	for(int i=0;i<k;i++) {
		fscanf(in, "%d\n", &cards[i]);
	}
	sort(cards.begin(), cards.end());
	if(cards[0] == 0) {
		int count = 0;
		int count2 = 0;
		int max_count = 0;
		int prev = -1;
		for(int i=1;i<k;i++) {
			int curr = cards[i];
			if(curr - prev == 2) {
				count = count2;
				count2 = 0;
				count++;
			} else if(curr - prev != 1) {
				count = 0;
				count2 = 0;
			}
			count++;
			count2++;
			max_count = max(max_count, count);
			prev = curr;
		}
		fprintf(out, "%d\n", max_count);
	} else {
		int count = 0;
		int max_count = 0;
		int prev = -1;
		for(int i=0;i<k;i++) {
			int curr = cards[i];
			if(curr - prev != 1) {
				count = 0;
			}
			count++;
			max_count = max(max_count, count);
			prev = curr;
		}
		fprintf(out, "%d\n", max_count);
	}
	fclose(in);
	fclose(out);
	return 0;
}