2012-03-17から1日間の記事一覧

AOJ_0231 Dangerous Bridge

AOJ

問題 解法 優先順位付きキューを使って橋にかかる重さの変化を管理するとやりやすい。 体重Mの人が時刻Aに橋を渡り始めた---> (A, M)をプッシュ 体重Mの人が時刻Bに橋を渡り終えた---> (B, -M)をプッシュ すべてキューにつっこんだあと、時刻の小さいほうか…

AOJ_0227 Thanksgiving

問題 解法 貪欲法を使って、値段の高いものから順に袋に入れていけばいい。 つまり、値段の高い順にソートして、mで割りきれる番号の値段以外の合計を求める。 #include <cstdio> #include <algorithm> using namespace std; const int MAX_N = 1000; int yasai[MAX_N]; int mai</algorithm></cstdio>…

AOJ_0226 Hit and Blow

AOJ

問題 解法 2つの数字を読み込んでから、文字列に変換するとやりやすい。 #include <cstdio> using namespace std; char r[5], a[5]; int main(){ int rd, ad; while(scanf("%d %d", &rd, &ad) && rd){ sprintf(r, "%04d", rd); sprintf(a, "%04d", ad); int hit = 0,</cstdio>…

AOJ_0125 Day Count

問題 解法 1年1月1日から何日経過しているかを計算するといい。 この時、フェアフィールドの公式を使うと便利。 #include <cstdio> using namespace std; int dc(int y, int m, int d){ if(m <= 2){ y--; m += 12; } return 365*y+y/4-y/100+y/400+306*(m+1)/10+d-42</cstdio>…

POJ_1012 Joseph

POJ

問題 解法 カンニングした 配列を作って、コピペする。 配列作成用 #include <cstdio> using namespace std; int a[14]; bool c(int k, int m){ int i = 0, p; for(p = 2 * k; p > k; p--){ i = (i + m - 1) % p; if(i < k) return false; } return true; } int main</cstdio>…