SRM 481 DIV 2

また0点…どんどん緑コーダーが遠ざかっていく…
しかし、さっき手元でデバッグしていたら、本当の恐怖はそんなモンではなかった…

250点問題(誤答)

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <cfloat>
#include <map>
#include <utility>
#include <set>
#include <iostream>
#include <memory>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
#include <sstream>
#include <complex>
#include <stack>
#include <queue>
using namespace std;

class CircleMarket {
public:
	int makePurchases(vector <int> openTime, vector <int> closeTime, int travelTime) {
		bool ab[openTime.size()];
		int total = 0, bought = 0, lastbought = 0, curtime = 0;
		
		while(1){
			bought = 0;
			for(int i = 0; i < openTime.size(); i++){
				if(openTime[i] <= curtime  && curtime <= closeTime[i]){
					if(!ab[i]){
						bought++;
						ab[i] = true;
					}
				}
				curtime += travelTime;
			}
			total += bought;
			int flag = 0;
			for(int i = 0; i < closeTime.size(); i++){
				if(curtime <= closeTime[i]){
					flag = 1;
					break;
				}
			}
			if(!flag) break;
		};
		return total;
	}
};

これでSystem Test Failedした。一見、何がおかしいのだろうか、と思うのだが…

250点問題(正答)

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <cfloat>
#include <map>
#include <utility>
#include <set>
#include <iostream>
#include <memory>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
#include <sstream>
#include <complex>
#include <stack>
#include <queue>
using namespace std;

class CircleMarket {
public:
	int makePurchases(vector <int> openTime, vector <int> closeTime, int travelTime) {
		vector<bool> ab(openTime.size());
		int total = 0, bought = 0, lastbought = 0, curtime = 0;
		
		while(1){
			bought = 0;
			for(int i = 0; i < openTime.size(); i++){
				if(openTime[i] <= curtime  && curtime <= closeTime[i]){
					if(!ab[i]){
						bought++;
						ab[i] = true;
					}
				}
				curtime += travelTime;
			}
			total += bought;
			int flag = 0;
			for(int i = 0; i < closeTime.size(); i++){
				if(curtime <= closeTime[i]){
					flag = 1;
					break;
				}
			}
			if(!flag) break;
		};
		return total;
	}
};

違いがお分かり頂けただろうか。そう、vector ab(openTime.size()か、bool ab[openTime.size()]かの差である。

このミスが何故痛いかというと、手元のCodeProcessorでテストすると全部Passedするのだが、サーバー側でTestすると、最初に与えられているテストケースからして1問も通らないという事だ!

(まあそりゃさ、autoな変数が中にゴミが入ってる事ぐらい分かるけどさ、でもそもそも慌てて、こんな書き方したの自体はじめてだったし…)


900点問題はもうデバッグする気も失せた。あとは野となれ山となれ…