codefestival final C Time Gap
問題
コード (2WA間違いコード)
int N; int pot(int a,int b){ return ((a*b)?max(abs(a-b),abs(24 - a - b)):max(a,b)); } int main(){ //cout.precision(10); cin.tie(0); ios::sync_with_stdio(false); cin >> N; vector<int> d(N+1,0); vector<int> ct(13); //カウント用 ct[0] = 1; REP(i,N){ cin >> d[i]; //0:高橋くん,1~N:参加者 ct[d[i]]++; if(ct[d[i]]==3){ cout << 0 << endl; return 0; } } int ans = 12; for(int i = 0;i < N;i++){ for(int j = i+1;j <= N;j++){ int tmp = pot(d[i],d[j]); chmin(ans,tmp); } } cout << ans << endl; }
自分の方針
d[i]
d[j]
が与えられた時、その二人の時差の最小値の最大値を返す関数 pot
を作って、それをN+1人に対し計算し、その最小値を出力した。
しかしこれでは例えば、高橋くんとの時差 t
に 一人しかいないときでも、t
と 24-t
に両方いるようにみなしてしまっているので、誤りだった。
解説では、3つ以上同じ d[i]
がきたら0を出力し、そうでないときは、一人なら t
と 24-t
のそれぞれ2通りに置いてためす、二人なら両方に配置するといいと書いてあった。
考察不足...。