SRM 460 div2 medium
SRM 460 div2 medium
かなりはまった。 i 0 1 2 cnt 4 2 1 ---------------------------------------------- sum 20 15 30
このとき、cnt[0,i) / sum[0,i);
としてはいけない。なぜなら、それぞれの都市に行く確率は全く同じだから。
この図で言うと、i = 2; の都市に行く確率は1/3であって、30/65ではない。
考えれば当たり前のことも、思い込みって怖いね。
double find(vectorminJ, vector maxJ, vector minB, vector maxB) { int cities = minJ.size(); double ans = 0; //return ans = cnt/sum; for(int i = 0; i < cities; i++) { //J for(int j = 0; j < cities; j++) { //B int sum = (maxJ[i]-minJ[i] + 1) * (maxB[j] - minB[j] + 1) * cities * cities; int tmp_min = min(maxJ[i], maxB[j]); int tmp_max = max(minJ[i], minB[j]); int cnt = 0; if(tmp_min >= tmp_max) { int tmp = tmp_min - tmp_max; cnt = (tmp + 1); } ans += (double)cnt / sum; } } //end for(i) return ans; }
赤い太字がポイント