2010-01-01から1年間の記事一覧

AOJ - Problem 0028 : Mode Value

AOJ

問題文 入力された整数値のうち出現頻度が多いものを出力する問題です。 数字ごとに何回入力されたかを配列などに保持して最後にその出現回数の最大のものを出力するようにします。 複数あるときは、昇順にソートしてから複数の数字を出力します。 #include <iostream></iostream>…

AOJ - Problem 0027 : What day is today?

AOJ

問題文 1月1日から順に1日ずつ増やして曜日を判定するようにしました。 ツェラーの公式という西暦、月、日から曜日を求める有名な公式があるのでそちらを使った方がよかったかもしれません。 #include <iostream> #include <string> using namespace std; int main(){ string w</string></iostream>…

AOJ - Problem 0026 : Dropping Ink

AOJ

問題文 素直に実装するだけです。気を付けることは特になかった気がします。 #include <stdio.h> int main(){ int map[10][10],ink,x,y,max=0,count=0; int dx[] = { 0, 0,-1, 1,-1,-1, 1, 1, 0, 0,-2, 2}; int dy[] = {-1, 1, 0, 0,-1, 1,-1, 1,-2, 2, 0, 0}; for(in</stdio.h>…

AOJ - Problem 0025 : Hit and Blow

AOJ

問題文 有名なゲームのヒットアンドブローですね。学校が終わった後少し時間があったとき 自分で遊ぶ用のヒットアンドブローを暇つぶしにコーディングしたりしてたので、 わりとすぐに解けました。 位置も数字も一致している数はblowに含まれないので気をつ…

AOJ - Problem 0024 : Physical Experiments

AOJ

問題文 玉が割れるのに必要な最低速度vが与えられるので速度vから時間tを求め、時間tから高さyを求めましょう。 高さy[m]が分かればy以上の高さを持つ最小の階が答えとなります。 #include <iostream> using namespace std; int main(){ double v, t, y; int n, h[1000</iostream>…

AOJ - Problem 0023 : Circles Intersection

問題文 円と円が交わっていないか、交わっているか含まれているかを判定して出力する問題です。 2点間の距離と2つの円の半径の大小関係から判定できます。円のどちらかが含まれている場合は 半径を比較して小さい円が大きい円に含まれています。 #include <iostream></iostream>…

AOJ - Problem 0022 : Maximum Sum Sequence

AOJ

問題文 連続した項の和の最大値を出力する問題です。下のソースコードは計算量がO(n^2)です。 ちょっと危ないかと思いきやn またこの問題は最低1つは選択しないといけないようなので、-1,-2,-3という数列なら-1と出力 しなければならないようです。 #includ…

AOJ - Problem 0021 : Parallelism

問題文 4つの点A, B, C, Dがあり、直線ABとCDが平行か判定する問題です。 幾何問題の中では初歩的な問題です。 幾何問題のベクトル演算にかんする解説がACM/ICPC国内予選突破の手引きにあり、分かりやすいです。 幾何の基本的なベクトル演算はこのサイトを…

AOJ - Problem 0020 : Capitalize

問題文 アルファベットの小文字を大文字に変換して出力するプログラムです。 文字列関連の問題はASCIIコードの知識があると 楽になることがあるので覚えておくといいかもしれません。 #include <iostream> #include <string> using namespace std; int main(){ string s; while</string></iostream>…

AOJ - Problem 0019 : Factorial

AOJ

問題文 入力したnに対し、n!(nの階乗)を出力する問題です。 ただしnが20以下となっているので、int型の場合(long int型)は32bit(=4byte)なので 20!では大きすぎてオーバーフローしてしまうみたいです。 なので、long long int型(64bit)を使います。これなら2…

AOJ - Problem 0018 : Sorting Five Numbers

問題文 5つの整数を降順に整列して出力する問題です。降順なので大きい数字から順に表示しましょう。 #include <iostream> #include <algorithm> #include <vector> using namespace std; int main(){ vector<int> a; int n; for(int i=0 ; i<5 ; i++){ cin >> n; a.push_back(n); } sort( a.be</int></vector></algorithm></iostream>…

AOJ - Problem 0017 : Caesar Cipher

問題文 シーザー暗号に関する問題です。何故かWAをたくさん出してしまいました。 きっとWAを出した人が多い気がします。1行の文字列を何文字かずらしそのなかに"the","this","that"が含まれていたら 出力するようにします。一行ごとに読み取り、その文字列…

AOJ - Problem 0016 : Treasure Hunt

AOJ

問題文 歩数(進む距離)と回転角度が与えられ、最後の位置座標を出力する問題です。 初めこの回転角度を進む角度と勘違いしてWAになりました(ぉぃ回転角度なので、現在の角度に加算してあげましょう。 たくさんキャストしてしているが、Acceptしたので細かい…

AOJ - Problem 0015 : National Budget

AOJ

問題文 80桁以下の和を計算して出力する問題です。80桁を超えるときは"overflow"と出力するようです。 80桁だと当然int型では計算できないので、文字列として読み込み、1の位から順に1ケタずつ 計算するのが正攻法だと思われます。 C++のstring型を使いま…

AOJ - Problem 0014 : Integral

AOJ

問題文 積分の問題なのでdouble型を使うと思いきや整数値しか使わない問題でした。 長方形の面積の和を出力します。 #include <iostream> using namespace std; int f(int x){ return (x*x); } int main(){ int d,s; while( cin >> d ){ s = 0; for(int i=1 ; (d*i)<=(</iostream>…

AOJ - Problem 0013 : Switching Railroad Cars

AOJ

問題文 スタックを実装するだけの問題です。 C言語で提出する場合には、1から実装する必要がありますが、 C++ならSTLを使うと実装しなくていいので楽です。 #include <iostream> #include <stack> using namespace std; int main(){ stack<int> st; int n, a; while(cin >> n){ if</int></stack></iostream>…

AOJ - Problem 0012 : A Point in a Triangle

問題文 三角形の内部に点があるかどうか判定する問題です。 三角形の頂点3つを角A,B,C、判定する点をPとすると角APB,BPC,CPAの角度の和が 360°なら内部にあると判定する方法でOKです。 もしかすると他の解法もあるかもしれません。 Problem 0010 : Circumsc…

AOJ - Problem 0011 : Drawing Lots

AOJ

問題文 あみだくじの問題です。 配列(リスト)の値を交換するだけです。値を交換するとき int a,b; a = b; b = a;と書かないように気をつけましょう。 #include <cstdio> inline void swap(int array[], int a, int b){ int c = array[a]; array[a] = array[b]; array</cstdio>…

AOJ - Problem 0010 : Circumscribed Circle of a Triangle

問題文 外接円の半径と外心を出力する問題です。 外接円と外心は高校生のときに習った記憶があります。 高校の教科書にも載っていると思います。 三角形が出てくるような幾何の問題では、正弦定理や余弦定理を使うことがあります。 外接円(wikipedia) 三角形…

AOJ - Problem 0009 : Prime Number

問題文 n以下の素数の個数を出力する問題です。 1は素数ではないので気をつけましょう。 素数の問題ではエラトステネスのふるいを使うことが多いです。 エラトステネスのふるいについての説明はwikipediaに詳しく載っています。 とてもわかりやすいので一度…

AOJ - Problem 0008 : Sum of 4 Integers

問題文 4つの整数a,b,c,dの和がnになる組み合わせ数を出力する問題です。 整数の範囲が0〜9なので4重forループという力任せなやり方でも通ります(ぉぃ #include <iostream> using namespace std; int main(){ int n,ans; while( cin >> n ){ ans = 0; if(n<=36){ for(</iostream>…

AOJ - Problem 0007 : Debt Hell

AOJ

問題文 利子を計算するだけの問題です。 #include <iostream> using namespace std; int main(){ int money = 100000; int n; cin >> n; for(int i=0 ; i</iostream>

AOJ - Problem 0006 : Reverse Sequence

問題文 文字列を逆にして出力する問題です。 なお最後に改行を出力しないとWAになるので注意しましょう! #include <iostream> #include <string> #include <algorithm> using namespace std; int main(){ string s; while ( cin >> s ) { reverse( s.begin() , s.end() ); cout << s << e</algorithm></string></iostream>…

AOJ - Problem 0005 : GCD and LCM

問題文 2つの整数値の最大公約数と最小公倍数を出力する問題です。 最大公約数と最小公倍数についてはwikipediaにも載っています。 最大公約数 最小公倍数 #include <iostream> using namespace std; int gcd(int a, int b){ return (b>0)? gcd(b, a%b) : a ; } int l</iostream>…

AOJ - Problem 0004 : Simultaneous Equation

AOJ

問題文 連立方程式を解く問題です。yについて変形し代入し、xを求めます。 とても無駄が多く参考にならないコードです(汗) 一応Acceptしていますが… 問題文の下の方のHintにも書いていますが、xが-0になることがありますが、-0.000と出力するとWAになるので…

AOJ - Problem 0003 : Is it a Right Triangle?

AOJ

問題文 3つの辺の長さを持つ三角形が直角三角形かどうか判定して出力する問題です。 多分中学校で習ったピタゴラスの定理を使います。 2つの辺の長さの2乗の和がもう一つの辺の長さの2乗と等しいか調べましょう。 辺が3つなので調べる組み合わせの3通…

AOJ - Problem 0002 : Digit Number

AOJ

問題文 2つの整数値の和の桁数を出力する問題です。 whileループで0になるまで10で割って代入します。 ループした回数が桁数になります。 #include <iostream> using namespace std; int main(){ int a, b, ans; while ( cin >> a >> b ) { a += b; ans = 0; while</iostream>…

AOJ - Problem 0001 : List of Top 3 Hills

問題文 10個の整数値のうち高い順に3つ出力する問題です。 STLを使うとソートを実装する必要がないのでとても楽です。 #include <iostream> #include <vector> #include <algorithm> using namespace std; int main(){ int n; vector<int> high; for(int i=0 ; i<10 ; i++){ cin >> n; high.pu</int></algorithm></vector></iostream>…

AOJ - Problem 0000 : QQ

AOJ

問題文 九九を1*1=1から9*9=81まで出力する問題です。 forで回すだけ、最初なので簡単ですね。 #include <iostream> using namespace std; int main(){ for(int i=1 ; i<=9 ; i++){ for(int j=1 ; j<=9 ; j++){ cout << i << "x" << j << "=" << (i*j) << endl; } } }</iostream>