CF268に参加。
Bを落としたけど幸いA,Cが解けて好順位。
おかげでレートが自己ベストになった。SRMもこのぐらいならなぁ。
http://codeforces.com/contest/468/problem/A
問題
初期状態で1~Nの整数が1つずつ入った数列がある。
このうち、数列から2要素を取り除き、和か差か積のいずれかを数列に追加する、という処理を繰り返す。
最後数列が1要素になるときに24にすることができるか。
解法
色々あるが自分の解法を紹介。
- N<=3: 最大で3*(2+1)=9までしか作れないので解なし。
- N==4: 4*3*2*1=24
- N==5: (5-2+3)*4*1=24
- N>=6: 6*4*1+(5-3-2)*7*8*....=24
int N; void solve() { int i,j,k,l,r,x,y; string s; cin>>N; if(N<=3) return _P("NO\n"); _P("YES\n"); if(N==4) { _P("1 * 2 = 2\n"); _P("2 * 3 = 6\n"); _P("6 * 4 = 24\n"); } else if(N==5) { _P("5 - 2 = 3\n"); _P("3 + 3 = 6\n"); _P("4 * 6 = 24\n"); _P("24 * 1 = 24\n"); } else if(N>=6) { _P("6 * 4 = 24\n"); _P("5 - 3 = 2\n"); _P("2 - 2 = 0\n"); for(i=1;i<=N;i++) if(i==1 || i>6) _P("0 * %d = 0\n",i); _P("24 + 0 = 24\n"); } }
まとめ
面白い問題だった。