CODE THANKS FESTIVAL 2017に参加したんですよ。
朝
7:30に起床AC。8:00ちょいに出発~。
あれ、交通費とかどうするんだろう、何?領収書??
んじゃあ切符じゃなきゃあかんな。->WA(在来線は領収書必要ない)
帰りの分も買っとくか~。->WA(帰りの切符を新橋やテレコムセンターでなく最寄り駅で買ったため帰りに苦労する羽目になる、帰りに無駄にみどりの窓口とか行った。)
ゆりかもめゆれるね
— seica (@seica_at_se) 2017年12月2日
テレコムセンターに着く
会場どこやろ?人の流れできてるしそれに任せりゃいいかな~?->WA(そもそも参加者100しかいないのに一本の電車で流れができるほど人来ない)
ということで会場入りまではWAまみれ、太陽でした。
ちゃんと調べましょう。
コンテスト前
1800点以上でパーカーだそうです。
500まで全部解かないといけない、微妙ですね。
開始3分前になってトイレに行きたくなる。
コンテスト中
A:はい->AC
B:、、、え?なんでみんなそんなカタカタゆーてんの?
いやいや、まってまって、回文足りないところどうすんの(?)
文字列ひっくり返して両端から見る?(?????)
、、、。
、、、。->AC
int main() { string str; cin >> str; int ans = 1000; REP(a,str.size()) { int i = a; int j = str.size()-1; while(j-i >= 1) { if(str[i] == str[j]) { i++;j--; } else { break; } } if(j - i < 1) { ans = min(ans,a); } //cout << i << ' ' << j << endl; } cout << ans << endl; return 0; }
何ともね。うん
C:ああ、priority_queueね、はい->AC
ll ans; int n,k; int main() { cin >> n >> k; priority_queue<PP,vector<PP>,greater<PP> > pq; REP(i,n) { ll a,b; cin >> a >> b; pq.push(MP(a,b)); } REP(i,k) { PP tmp = pq.top();pq.pop(); ans += tmp.FI; tmp.FI += tmp.SE; pq.push(tmp); } cout << ans << endl; return 0; }
D:5と4で、、?->1個ずつ空き変わるね。
6と8とかは??->2個ずつ変わるねえ。
10と15は??->5個ずつね、うん。GCDっぽいね。->AC
ll gcd(ll a,ll b) { if(b == 0) { return a; } else { return gcd(b,a%b); } } int main() { ll n,m; cin >> n >> m; ll ans = m - gcd(max(n,m),min(n,m)); cout << ans << endl; return 0; }
書き方ひでえ、まあACしたしいいや。
E:インタラクティブ?400で??とりあえずflush調べよ。
、、、。
えー、1回全部見る、、、。->Eからだなこれ(F先でもよかったけどまあ両方できたので)
なんだろ、nが50で質問できるのが10回か、、、。
本物が奇数で偽物が偶数。
なんか最初ざっくりやって偶奇で分けたいな->複数個一緒に見なあいといけない時点でむつかしいから却下。
1回に5個判別出来りゃいいやろ??
あ、袋1つに10000枚くらいあるやん、枚数上手く分ければ行けそう->10倍で分けるか!(WA)
キリいい数字だとダメか、んじゃ7で->AC
int ans[60]; int w[] = {0,9,11,8,10,12}; int main() { int n; cin >> n; int tmp = n; int now = 0; for(int q = 0;q < 10;q++) { cout << '?' << ' '; int prev = now; for(int i = 0;i < now;i++) { cout << 0 << ' '; } int kake = 1; for(int i = 0;(i < 5 && now < n);i++) { cout << kake << ' '; kake *= 7; now++; } for(int i = now;i < n;i++) { cout << 0 << ' '; } cout << endl; int ret; cin >> ret; REP(i,6*6*6*6*6) { int tmp = i; int kake = 1; int hikaku = 0; REP(j,5) { hikaku += w[tmp%6] * kake; //cout << w[tmp%6] << ' '; kake *= 7; tmp /= 6; } //cout << endl; //cout << hikaku << endl; if(hikaku == ret) { //cout << prev << endl; tmp = i; REP(j,5) { if(tmp % 6 <= 2 && tmp % 6 != 0) { ans[prev + j] = true; } tmp /= 6; } break; } } } cout << '!' << ' ' ; REP(i,n) { cout << ans[i] << ' '; } cout << endl; return 0; }
なんだこれ、めっちゃ書くのムズイ、、、。
F:足した和が10^5ね、
nが10^5の時とか全部1だね。
DPの計算量落とせるね。
やー。(配列を100010でとってたためRE)
とー。(配列を200010にしたらAC)
ll ans[2][201010]; #define INF 1000000007 int main() { int n,k; cin >> n >> k; vector<ll> v; REP(i,n) { int tmp; cin >> tmp; v.PB(tmp); } sort(ALL(v)); ans[0][0] = 1; int m_max = 0; REP(i,n) { for(int j = 0;j <= m_max;j++) { if(ans[0][j] != 0) { ans[1][j ^ v[i]] = ans[0][j]; m_max = max(m_max,(int)(j^v[i])); } else { ans[1][j ^ v[i]] = 0; } } REP(j,m_max+2) { ans[0][j] = (ans[0][j] + ans[1][j]) % INF; } //SHOW1d(ans[0],10); } cout << ans[0][k]%INF << endl; return 0; }
マジか、パーカーゲットじゃん!!
残り1時間あるしもう一問いけるんじゃね!?!?(いいえ)
G:二部マッチングじゃね!?!?->WA
知ってた。(知らなかった)
どうしよう、なんか法則ないかな、、、?
(こうなった時点で全列挙からどんどん離れていく)
残り30分。H考える?えー?いやG!!!->end!!!
結局トイレ行かなかった。
結果35位。結構うれしい。
ちょくだいさんの解説は面白かったです(小並感)(主に英語読み飛ばすのは共感、英語無理)
その後。
名札にアイコン欲しい。
誰がどれ、、、?(ア)
まあ、ちょこちょこ話できたからよし。
お寿司はおいしかった。
今度はもうちょいいろんな人に話しかけに行こう。
帰宅
この切符使えないじゃん!!!!!(WA)