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",¤t); 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; }