JOI2008本選 問題1@C++(43)

昔のIDとか引っ張り出すの面倒なのでJで。

/*
TASKNO: 1
LANG: C++
NAME: Masaki Hara J
*/

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

using namespace std;

int main(int argc,char* argv[])
{
	FILE* in=fopen("input.txt","r");
	FILE* out=fopen("output.txt","w");
	int n;
	fscanf(in,"%d\n",&n);
	int sum=0;
	vector<int> len_stack;
	int last_color=0;
	for(int i=0;i<n;i++) {
		int current;
		fscanf(in,"%d\n",&current);
		if(len_stack.size()==0) {
			len_stack.push_back(0);
			len_stack.push_back(0);
		}
		if(current!=last_color) {
			if(i%2==0) {
				//i+1 is odd
				len_stack.push_back(0);
			} else {
				//i+1 is even
				int last_len=len_stack.back();
				if(last_color==1) {
					sum += last_len;
				} else {
					sum -= last_len;
				}
				len_stack.pop_back();
				if(len_stack.size()==0) {
					len_stack.push_back(0);
					len_stack.push_back(0);
				}
				len_stack.back()+=last_len;
			}
		}
		len_stack.back()++;
		if(current==0) sum++;
		last_color=current;
	}
	fprintf(out,"%d\n",sum);
	fclose(out);
	fclose(in);
	return 0;
}