JOI/IOI Judgeまとめ
知っているものをまとめてみました。
JOI春合宿
2007
2007年 日本情報オリンピック春合宿OJ | Atcoder
2008
2008年 日本情報オリンピック春合宿OJ | Atcoder
2009
2009年 日本情報オリンピック春合宿OJ | Atcoder
2010
2010年 日本情報オリンピック春合宿OJ | Atcoder
2011
2011年 日本情報オリンピック春合宿OJ | Atcoder
2012
2012年 日本情報オリンピック春合宿OJ | Atcoder
2013
2013年 日本情報オリンピック春合宿 1日目 | Atcoder
2013年 日本情報オリンピック春合宿 2日目 | Atcoder
2013年 日本情報オリンピック春合宿 3日目 | Atcoder
2013年 日本情報オリンピック春合宿 4日目 | Atcoder
2014
2015
2016
IOI
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
IOI 2013 | Baekjoon Online Judge (韓国語)
2014
IOI 2014 | Baekjoon Online Judge (韓国語)
2015
IOI 2015 | Baekjoon Online Judge (韓国語)
2016
APIO
2007
APIO 2007 | Baekjoon Online Judge (韓国語)
2008
APIO 2008 | Baekjoon Online Judge (韓国語)
2009
APIO 2009 | Baekjoon Online Judge (韓国語)
2010
APIO 2010 | Baekjoon Online Judge (韓国語)
2011
APIO 2011 | Baekjoon Online Judge (韓国語)
2012
APIO 2012 | Baekjoon Online Judge (韓国語)
2013
APIO 2013 | Baekjoon Online Judge (韓国語)
2014
APIO 2014 | Baekjoon Online Judge (韓国語)
2015
APIO 2015 | Baekjoon Online Judge (韓国語)
2016
JOI予選の提出について
これは Competitive Programming (その2) Advent Calendar 2015 - Adventar11日目の記事です。
高校2年(高専2年)以下を対象とした内容です。
JOI予選まで残り2日となりました。
本選出場を目指して、過去問を解いている人も多いとは思いますが、
本選出場の大きな壁と言われている、解答の提出だけに焦点を当てて書きたいと思います。
(人ごとではない...)
※ここでの提出ミスとはプログラム以外の部分でのミス全般を指すこととします。
提出ミスの種類
提出ミスといってもいくつか種類があります。
主なものとして以下の4つではないでしょうか?
- 無駄な文字(BOM等)が入ってしまう場合
- 実行時に入力と出力のファイルが一致してない場合
- 問題を間違えて提出してしまう場合(2問目の提出に3問目の出力を提出等)
- テストケースの番号を間違えて提出してしまう場合(出力2に対して出力3を提出等)
出力時の対策(C/C++向け)
提出ミスの種類の1,2がこれに当たります。
まず、コピペして出力ファイルを作成すると無駄な文字が入ってしまう可能性が高まります。
その失敗を防ぐためプログラムから直接書き込むようにしましょう。
方法としては、
- リダイレクト
- freopen
- fscanf,printf
が考えられます。(上から順にオススメ)
2. freopen
プログラム内で対応。IDEでも可。
//プログラムの先頭に記述 freopen("./in.txt","r",stdin); freopen("./out.txt","w",stdout); //入出力は普段通り、以下のように記述 scanf("%d",&a); printf("%d\n",&ans); puts("Yes");
3. fscanf,printf
プログラム内で対応。IDEでも可。
//プログラムの先頭に記述 FILE *fin = fopen("./in.txt","r"); FILE *fout = fopen("./out.txt","w"); //入出力を以下のように記述 fscanf(fin,"%d",&a); fprintf(fout,"%d\n",ans);
これで、直接書き出せるようになりました。
しかし、入力と出力のファイルの指定を間違えるかもしれません。
そこで、問題番号の指定だけで5つのファイルに対して実行してくれるようにしてみましょう。
提出時の対策
提出するファイルが完成したら、次は提出です。
提出ミスの種類の3,4がこれに当たります。
出力ファイル名は問題番号名と入力ケース番号を含む同じ形になっていると良いです。
提出時に一目でわからない様であれば提出ミスが増えます。
例1) out3-1.txt out5-2.txt (1問目の出力1,3問目の出力2)
例2) 2016-yo-t3-out1.txt 2016-yo-t5-out2.txt (1問目の出力1,3問目の出力2)
※先ほどの実行用シェルスクリプトを使うと例2のようになります。
提出してみます。
提出するとダウンロードができるようになりますね。
そのダウンロードをクリックすると、
練習 ... J160000XX-pr-t1-out1.txt
予選 ... J160000XX-yo-t1-out1.txt
のように以下の名前の付け方でダウンロードされます。
[ID]-[練習or予選]-t[問題番号]-out[ケース番号].txt
※ソースコードは[ID]-yo-t[問題番号]-program.[拡張子]
全てのデータに対して比較をしてあげれば良いわけです。
Linux・MacOSX・Cygwin等
例) ./diff.sh 3 (3問目に対して実行)
id=J160000XX diff -s q$1.cpp $id-yo-t$1-program.cpp for lo in 1 2 3 4 5 do diff -s 2016-yo-t$1-out$lo.txt $id-yo-t$1-out$lo.txt done
これで全てが一致していれば提出はミス無く完了です。
自分の構成
最後に本番で使用予定の構成を書いておきます。
参考程度に見てください。
run.sh
year=2016 con=yo rm ./joi-$1 g++ q$1.cpp -Wall -std=c++0x -O2 -o joi-$1 for lo in 1 2 3 4 5 do time ./joi-$1 < $year-$con-t$1-in$lo.txt > $year-$con-t$1-out$lo.txt cp -f $year-$con-t$1-out$lo.txt ../diff/ done
diff.sh
year=2016 con=yo id=J160000XX diff -s q$1.cpp $id-$con-t$1-program.cpp for lo in 1 2 3 4 5 do diff -s $year-$con-t$1-out$lo.txt $id-$con-t$1-out$lo.txt done
まとめ
- 予選は提出ミスに気を付けましょう
- 規則的なファイル名の付け方をしましょう
- できる限りケース番号の指定は手作業で行うのは止めましょう。
- 提出後に確認を行いましょう
- 目視での確認も忘れずに