OJテクニック-言語標準と入力

1872 ワード

ACM問題で一番頭が痛いのは何ですか.OJシステムと戦ったばかりの新人にとって、プログラミングの達人かどうかにかかわらず、OJのいくつかの入出力の潜在的なルールは、無限のOJのエラーに火をつけます.今日は、朕が入浴した後にまとめてみます.
まず言語基準です.
一部のOJのコンパイル実行環境は非常に奇抜で、何の説明もありません.
C、C++のようにGCC 4を使用するか、VSの高バージョンコンパイラを使用します.Java用のjdkバージョンは何ですか.(一部のOJはjdk 1.4しかサポートしていないので、これは気が狂います.これは箱を分解して箱詰めしても使えないことを意味し、Scannerも使えないことを意味します).あるOJでC#プログラムの提出をサポートしていたことを覚えていて、私はとても嬉しいです..Netのバージョンの違いと前後の互換性がずっと良いので、私は勝手に簡単な問題を書いたが、コンパイルミスを発見して、OJのLOGを見て、意外にもC#のコンパイル環境がMonoであることを発見しました!少しも古い血が噴き出していない.
それからIDEを选んで、これはあまりくどくなくて、私はとてもまだその年VCを使うことを読みます.0とDev-C++の時間.
今、自分でOJの状況を押しましょう.誰がOJのためにPCのIDEをカスタマイズしますか.例えば、C++の
#<iostream>//GCC4
#<iostream.h>//VC6
#"iostream"//VC2003+
using namespace std;

また、乾物をください.自分でも用意しています.いくつかの入出力のテクニックをまとめます.
ファイルの最後まで読んで、プログラムは自動的に終わります
C/C++
while( ( scanf(“%d”, &a) ) != -1 )
while( ( scanf(“%d”, &a) ) != EOF)
while( ( scanf(“%d”, &a) ) == 1 )
while( ~( scanf(“%d”, &a) )  )

C++
while( !cin.eof())

Java
Scanner scn = new Scanner (System.in);
scn.hasNext()

いくつかの別の状況:
0を読むとプログラムは終了します
while( scanf(“%d”, &a) , a)
while( scanf(“%d”, &a)!=EOF && a)

複数の0を読み取るとプログラムは終了します
while( scanf(“%d%d%d”, &a, &b, &c), a+b+c ) //a,b,c  
while( scanf(“%d%d%d”, &a, &b, &c), a|b|c )

入力問題:(C、C++、Javaの3つの形式が与えられている)
整数を読みます.
scanf("%d", &n); 
cin >> n; 
int n = sc.nextInt(); 
文字列を読みます.
scanf("%s", s);
cin >> s; 
String s = sc.next(); 
浮動小数点数を読みます.
scanf("%lf", &t);
cin >> t; 
double t = sc.nextDouble(); 
行全体を読みます.
gets(s); 
cin.getline(...); 
String s = sc.nextLine();