AOJ - Problem 0106 : Discounts of Buckwheat

AOJ

問題文 入力された整数nに対しnグラムのそば粉を買うときの最小の金額を求める問題です。入力される範囲が[500,5000]と小さく、すべて100の倍数なので初めに計算しておくとよいです。 #include <iostream> #include <algorithm> using namespace std; const int INT_MAX = 1e+7; i</algorithm></iostream>…

AOJ - Problem 0558 : Cheese

問題文 1,2, ... , NのチーズがN個あり、1から順に食べるとき全部のチーズを食べるのに必要な最短経路を求める問題です(Nは9以下)。必ず全てのチーズが食べられることが保証されているようです。またフィールドの幅と高さw,hは1000以下となっています。幅優…

AOJ - Problem 1036 : Monster Factory

AOJ

問題文 探索する必要はなくシミュレーションする問題です。 毎回下端に届いたパッケージの記録からpush_down 命令かpush_right 命令をするか判断します。 最終的に上のラインと左のラインが空になったら右のラインに届いた順に出力します。 今回は文字列でデ…

AOJ - Problem 0150 : Twin Prime

問題文 n以下で最大の双子素数を求める問題です。エラトステネスのふるいであらかじめ素数を求めておきましょう。 #include <iostream> using namespace std; const int MAX = 100001; char p[MAX] = {0}; int main(){ for(int i=2 ; i < MAX ; i++ ) p[i] = 1; for(in</iostream>…

AOJ - Problem 1023 : Amazing Graze

AOJ

問題文 AN個の戦闘機とBN個の敵弾があり、それぞれの戦闘機について距離が4*R以内にある敵弾を数える問題でした(距離は戦闘機の中心座標から敵弾の中心座標までの距離で計算)。AN,BN 各戦闘機について自分のいる区画とその周囲8区画だけ調べるようにすると調…

AOJ - Problem 1008 : What Color Is The Universe?

AOJ

問題文 A = {a[1] , a[2] , ... a[n] }について 回数が|A|/2より多く出現する数字を出力する問題です。(|A|は要素数) #include <iostream> #include <map> using namespace std; int main(){ int n, a; while( cin >> n , n ){ map<int,int> m; for(int i=0 ; i < n ; i++ ){ cin >> </int,int></map></iostream>…

AOJ - Problem 1110 : Patience

AOJ

問題文 全探索で解ける問題です。幅優先探索でも深さ優先探索でも解けると思いますが、今回は深さ優先探索で解きました。同じ状態を再び探索しないようにメモしながら探索しました。2枚のカードを取り出したときカードを移動させる処理が少し煩わしいと感じ…

AOJ - Problem 1105 : Unable Count

問題文 [1,n]のうちa*i+b*jで表せない数が何個あるか数える問題です。入力a,b,nは10^6以下の整数でi,jは非負整数です。動的計画法で解ける問題でした。dp[x] := 整数xをa*i+b*jで表すことができるかどうか(0 or 1)で計算しました。dp[0]を1で初期化し、iを0…

AOJ - Problem 1126 : The Secret Number

問題文 DPで解く問題です。ボードが数字であるとき、その数字の後ろに右か下の位置の数字をつなげることができます。dp[y][x]にボードの(x,y)の位置からつくることのできる最大の数字が入るように計算していきます。右下からDPテーブルを埋めて行きましょう…

ショートコーディング超入門

この記事はCompetitive Programming Advent Calendar 16日目の記事です。実際のプログラミングコンテストでショートコーディングすることはあまりないかもしれませんが、この記事でショートコーディングに興味を持つ人が増えればさいわいです。ショートコー…

桜花あどべんとかれんだぁ(12日目)

おーかちゃんかわいいよおーかちゃんかわいいです ><おーかちゃんみたいにかわいくなりたいおーかちゃんみたいにかわいいようじょを目指すために桜花ちゃんがよく使う顔文字を調べてみました。 ∩(>◡<*)∩♡ (〃ノωノ)キャッ ヾ(๑╹◡╹)ノ"♡ (๑╹ω╹๑ )じー >ω< (/ω…

女帝advent calendar 5日目

これは女帝 Advent Calendar 2011 5日目の記事です。女帝の紹介女帝とはキャンパスの影の支配者と呼ばれ、この業界では恐れられているそうです。勉強会などいろいろなイベントに参加したり、今年のICPCでは女帝枠によりアジア地区大会進出し、アジア地区大会…

AOJ - Problem 1200 : Goldbach's Conjecture

問題文 4以上の偶数nについて、n=a+bとなる素数の組(a,b)がいくつあるか数える問題です。(2,3)と(3,2)のように順序が逆の組は区別されないので重複して数えないようにしましょう。この問題もエラトステネスの篩で素数表をあらかじめつくっておきましょう。 #…

AOJ - Problem 1004 : Pair of Primes

問題文 n個の組(1,n)(2,n-1)(3,n-2) ... (n-1,2)(n,1)について、2つの数字がどちらも素数の組の数を求める問題です。エラトステネスの篩で最初に素数表をつくっておきましょう。 #include <iostream> using namespace std; const int MAX = 1000001; char p[MAX] = {0}</iostream>…

AOJ - Problem 2185 : Petting Cats

AOJ

問題文 (X,Y)の位置に縦H横Wの建物があり、n匹の猫の座標が与えられたときに建物の中にいる猫の数を求める問題です。大小の比較で(x,y)にいる猫がその矩形(建物)のなかに含まれているか調べられます。 #include <iostream> using namespace std; int main(){ int t; ci</iostream>…

AOJ - Problem 0223 : Stray Twins

問題文 2人が同じ位置に来るのにかかる最小の時間を求める問題です。幅優先探索(BFS)で解くことができます。必要な情報は2人の位置座標と時間です。気をつけることは 2人は逆の動きをする 2人の位置座標が同じ場所の探索をしないようにフラグをたてるのを忘…

AOJ - Problem 1045 : Split Up!

問題文 数列(a_1, a_2, ... , a_n)をAとBの2つに分け、Aの総和とBの総和の差が最も少ないときの差を求める問題です。動的計画法を使う問題かと思いきやnが20以下と小さいので深さ優先探索(DFS)で全探索してもAcceptすることができるようです。 #include <iostream> #in</iostream>…

AOJ - Problem 1043 : Selecting Teams Advanced to Regional

問題文 ICPCのコンテストのチームの選抜に関する問題です。これくらいの問題は簡単に解けないとICPCでは歯が立たないレベルですね。4つのデータ(正解数,ペナルティ,ID,所属)をpair > >を使ってソートします。ソートしたあとは順位のよい方からみていって条件…

AOJ - Problem 1141 : Dirichlet's Theorem on Arithmetic Progressions

問題文 素数に関する問題です。エラトステネスの篩であらかじめ素数表をつくっておくとよいでしょう。 #include <iostream> #include <vector> using namespace std; const int MAX = 1000001; char p[MAX] = {0}; void f(){ for(int i=2 ; i < MAX ; i++ ) p[i] = 1; for(int </vector></iostream>…

AOJ - Problem 1166 : Amazing Mazes

問題文 幅優先探索でスタートからゴールまでの最短経路を求める問題です。 入力の数が偶数行と奇数行で異なり、入力がしんどい問題でした。 2年前はきちんとコードが書けなかったのでそう考えると私も成長しているのかもしれません。 #include <iostream> #include <map> #i</map></iostream>…

AOJ - Problem 1174 : Identically Colored Panels Connection

問題文 問題文をよく読んで全探索する問題です。同じ色でつながっているパネルはDFSで調べるよいでしょう。 5回までパネルの色を変更できますが5回目は目標の色にするとよいようです。(ソースコードではしていない) #include <iostream> #include <vector> #include <algorithm> using nam</algorithm></vector></iostream>…

AOJ - Problem 0209 : Scene in a Picture

AOJ

問題文 ただ実装するだけの問題ですがとても面倒なので落ち着いてコードを書かないとバグが入り込むかもしれません。 #include <iostream> #include <map> using namespace std; typedef pair<int,int> P; int n,m,f[101][101],s[51][51]; bool search(int sx, int sy){ for(int y=sy</int,int></map></iostream>…

AOJ - Problem 0200 : Traveling Alone: One-way Ticket of Youth

問題文 ワーシャルフロイド法で解ける問題でした。 #include <iostream> #include <algorithm> using namespace std; const int INF = 1e+9; int main(){ int n,m; while( cin >> n >> m , n||m ){ int d[2][101][101]; for(int i=0 ; i < 101 ; i++ ){ for(int j=0 ; j < 101 ; j</algorithm></iostream>…

AOJ - Problem 0189 : Convenient Location

問題文 ワーシャルフロイド法で解くことができる問題でした。 #include <iostream> #include <algorithm> using namespace std; const int INF = 1e+9; int main(){ int n; while( cin >> n , n ){ int d[11][11], v=0, s[11]={0}; for(int i=0 ; i < 11 ; i++ ){ for(int j=0 ; j </algorithm></iostream>…

AOJ - Problem 0117 : A reward for a Carpenter

問題文 ワーシャルフロイド法で解くことができる問題でした。 ダイクストラ法でも解けるようですが、行きと帰りの最小コストだけ分かればよいのでワーシャルフロイド法を使うほうが楽なようです。(ノード数も少ない) #include <cstdio> #include <algorithm> using namespace st</algorithm></cstdio>…

AOJ - Problem 1109 : Fermat's Last Theorem

AOJ

問題文 1 #include <iostream> #include <algorithm> using namespace std; int main(){ int z; while( cin >> z , z ){ long long int ans = -1; for(long long int x = 1 ; x*x*x < z*z*z ; x++ ){ for(long long int y=1 ; x*x*x + y*y*y < z*z*z ; y++ ){ long long int s = z</algorithm></iostream>…

AOJ - Problem 0043 : Puzzle

AOJ

問題文 麻雀の役判定のような問題です。最初に2つ同じ数字のペアを決め、のこりを全探索で3個の数字の組み合わせ4つになるか調べるようにしました。同じ数字は4つまでしか使えないことに注意しましょう。 #include <iostream> #include <vector> #include <string> using namespace s</string></vector></iostream>…

AOJ ジャンル分けメモ

AOJ

自分のためのAOJの問題の解法ごとのジャンル分けメモです。二番煎じっぽくて緑の人に怒られそうな記事ですがお許しください。 最適な解法とは限りません。難易度順ではなく問題番号順に並んでいます。思い出したときに随時追加します。ソートする問題Problem…

AOJ - Problem 0071 : Bombs Chain

問題文 再帰を使って深さ優先探索(DFS)で解くとよいと思います。特に気をつけることはないと思います。 #include <iostream> #include <string> using namespace std; string f[8]; int dx[12] = {0,0,0,-1,-2,-3,0,0,0,1,2,3}; int dy[12] = {-1,-2,-3,0,0,0,1,2,3,0,0,0}; vo</string></iostream>…

AOJ - Problem 0124 : League Match Score Sheet

問題文 各チーム毎に勝ち点をそれぞれ勝(3点)、負(0点)、引分(1点)で計算し、勝点の高いチームから順にチーム名と勝点を出力します。 勝点が同じときは入力の順に出力することに気をつけてソートしましょう。 #include <iostream> #include <vector> #include <map> #include <string> #incl</string></map></vector></iostream>…