NF

地方で働くプログラマ

AtCoder Beginner Contest 127

atcoder.jp
参加したのでその勢いでメモ。

結果をしてはA、Bが解けて4169/5155位。CがTLE、DがWAでE、Fは読めず。
前回はABC解けて2724/5392位(unratedだったけど)だったので残念な結果に。ちょっと出来なさすぎてストレスに。。これコンテスト後も提出できるようなので、後でC,Dくらいはリトライしたいところ。


まずAとBは簡単だったので割愛。
Cはサンプルの動作はOKでしたが、愚直に実装したからかテストケースのうち3つがTLE(時間超過)となりNG。vectorからのeraseを調べて早いといわれる方法に変えてみたりしましたが改善せず。最後は時間切れに。多分、判定処理をもっと簡単なやり方でやるべきぽい(最小・最大との比較だけで十分。Lの最大>Rの最小の時注意だけど)。あと、repマクロとかimos法って何?TODO:あとで調べる


問題のD。これは問題を理解仕切れなかったぽいです。例えば入力例2だけど、A配列が「1 8 5 7 100 4 52 33 13 5」に対して、J=2(B=4、C=30)の時、「4」つのカードの数字をすべて「30」に置き換える(30未満の数字が4つ以上あるので)ので、「30 8 30 7 100 30 52 33 13 30」で333になると思ったんですが、出力例は338でした。
解説動画見ても分からなったんですが、これJがすべてのパターンについてカード入れ替えてよいという事だったということで理解ができました。日本語が理解できてなかったぽいです。残念。



あと他の人の提出が見てるので参考になる。少ないコード長で解いた人も凄いけど、少ない実行時間でやってる人がまた凄い。Cで一番短い人のコードはこんな感じ。

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,m;
	cin>>n>>m;
	int x=1,y=n;
	for(int i=0;i<m;i++){
		int a,b;
		cin>>a>>b;
		x=max(x,a);
		y=min(y,b);
	}
	cout<<max(y-x+1,0);
}

あと実行時間が短い人のを試しに一つ見たら、いきなり以下のようなコードで始まってて意味不明だった。あとで調べよう…

#ifdef LOCAL
#pragma GCC optimize ("O0")
#else
#pragma GCC optimize ("O3")
#endif
#include <bits/stdc++.h>


明日も開催されますが、旅行先の宿に居るので参加不可なので、また次があればトライしたいです。
疲れた…