読者です 読者をやめる 読者になる 読者になる

Codeforces Beta Round #63 (Div. 2)

暇なのでこの前のCFのDiv2参加記のことでも書く。

A,Eの2完で792位/792のトップでした。みんなつよすぎ・・・。


コンテスト開始前

id:tozangezanが参加するとか言ってたのでぱないとか思いながら待つ。あと先輩も参加してた。

[0:00] Aをヤフー翻訳にかける。

ベクトルの和が0になるならYESしなさい。

→あわわベクトルの和ってなんだっけ・・なんだっけ・・・・。(論外)

ググる

→ああ各次元毎に足すだけか。サンプル見ても足すだけやな。

→書いた。

[00:02] A passed pretest.

あれ、ググったのにも関わらず以外に時間経ってないと思いつつBを読む。

→なるほど、分からん。いつも人によって解き方違って面白いD読もう。

→ゲームとか・・・、「最適にプレイした場合」とかある。

→そっと閉じてC読む。分からん。

→E読む。あ、これ分かる。

→これってセグメントツリーとか使うんじゃないかな?いい機会だし組もう。

→蟻本持ってきて実装してみるといろいろ変な挙動する。

[00:30]

はじめてのセグメントツリーとかで未だにあたふたしている。

→B提出者多いしそろそろ読もう。

→いやでもこの英語分からない・・・。

[00:50]

未だにBの英文が分からない。悲しくなる。

→何を血迷ったかEの嘘解法(TLEとかしそうな解法)狙ってみる。pretest通りそうだったので。

→まあ順当にO(n-k)*k)の駄目解法を組もうとする。

→書いてたらどうみてもmapで出現度管理とか使えそうな気がしてくる。

→でも1つだけあるようなものから候補探すの大変だな・・・。

→範囲ずらしてる時、一緒にsetで成る候補リストに追加したり消したりしちゃえばいい気がしてくる。

→あれ、これ普通にホンモノの解法なんじゃね?とかビビりながら書く。

→書けた。提出。

[01:02] E passed pretest.

通ったし・・・!

→B読む。やっぱり分からん。

→Hackとかしよう。でもみんなA,Eはまともな解法してる。

→全員にEの最大を投げてみる。⇒全部失敗する。

→全員にAの適当なケースを投げてみる。⇒全部失敗する。

⇒全員にEのよく分からんケース投げてみる⇒全部失敗する。

[02:00] コンテスト終了

おお、(-60)・・・なんと神々しい。

システムテスト

まだシステムテスト通ってない状態は、Hackとかで増減した点数だけ反映されてるんですが、

-3000点とかでした。最高にクール。

とりあえず出したAとEはシステムテスト通ったんですが、提出するのが遅すぎたせいで、

496 + 1850 - 3000 = -654とかいう惜しい結果に終わりました。まさかの最下位。2完しても最下位になるCFのレベルは異常。

次はもっといい結果取りたいですね。いや、マジメな話。

レート:18191819(奇跡的に変動無し)

感想

こういう何が面白いのか良く分からない意味不明なことが堂々と出来るのもCFのサーバーが強いのとUnratedになるおかげです!!!!!!!


出したソース

きたない。

A

int main(){
        int n;
        int x=0,y=0,z=0;
         cin >> n;
         rep(i,n){
                int a,b,c;
                cin >> a >> b >> c;
                x += a , y += b , z += c;
         }
         cout << (x==0&&y==0&&z==0?"YES":"NO") << endl;
}

E

int main(){
    int n,m;
    cin >> n >> m;
    vector<int> data(n+1);
    rep(i,n)cin >> data[i];
    
    set<int> S;
    map< int , int  > cnt;
    
    rep(i,m){
        cnt[data[i]]++;
        if(cnt[data[i]] == 1) S.insert(data[i]);
        else S.erase(data[i]);
    }
    
    rep(i,n-m+1){
        if(S.empty())cout << "Nothing" << endl;
        else cout << *(S.rbegin()) << endl;
        int l = data[i];
        int r = data[i+m];
        cnt[l]--;
        if(cnt[l] == 1) S.insert(l);
        else S.erase(l);
        cnt[r]++;
        if(cnt[r] == 1) S.insert(r);
        else S.erase(r);
    }
}