2011-12-18 今週は高専プロコンのために舞鶴まで行ってきます
JOI 2011/2012
自分で解けたと思われるコードおいておきます.ですから問4以降のコードはノーコメント.
間違ってたり,桁あふれて,Wrong Answerもらう確率大です.くれぐれも参考程度で.
というわけで,以下,問1〜3のコードです.
すべてC++で書かれています.
問題1
問1はパスタとジュースのセット(合計金額-50)の最安値を出す問題です。
1行目〜3行目:パスタの値段
4行目〜5行目:ジュースの値段
//問1 #include <iostream> int main() { int pasta=10000,juice=10000,tmp; for(int i=0;i<3;++i) { std::cin >> tmp; pasta = std::min(tmp,pasta); } for(int i=0;i<2;++i) { std::cin >> tmp; juice = std::min(tmp,juice); } std::cout << pasta+juice-50 << std::endl; return 0; }
問題2
問2はサッカーのチーム数と総当たりの結果から勝ち点を比較し、チーム番号順に順位を出力します。
一行目:チーム数
二行目以降:A B C Dのスペース区切り(A,Bの点数はそれぞれC,D点)
ただし勝ち点は勝ち3点、引き分け1点、負け0点とする。
//問2 #include <iostream> #include <fstream> #include <vector> #include <algorithm> struct team_result{ team_result(int n) { name = n; result = 0; } int name; int result; int number; }; bool sort(const team_result& lv,const team_result& rv) { return lv.result > rv.result; } int main() { std::vector<team_result> match; int team; std::ifstream is("q.txt"); is >> team; for(int i=1;i<=team;++i) { match.push_back(team_result(i)); } std::vector<team_result> sorted(match); team = team * (team - 1) / 2; int A,B,C,D; for(int i=0;i<team;++i) { is >> A >> B >> C >> D; if(C == D) { ++match.at(A-1).result; ++match.at(B-1).result; } else if(C > D) match.at(A-1).result += 3; else if(D > C) match.at(B-1).result += 3; } std::sort(match.begin(),match.end(),sort); int now = 500; int now_num = 0; for(std::vector<team_result>::iterator it = match.begin();it != match.end();++it) { if(it->result == now) sorted.at(it->name-1).number = now_num; else { sorted.at(it->name-1).number = ++now_num; now = it->result; } } std::ofstream os("ans.txt"); for(std::vector<team_result>::iterator it = sorted.begin();it != sorted.end();++it) { os << it->number << "\r\n" << std::flush; } os.close(); return 0; }
問題3
問3はピザの生地とトッピングの値段、ピザ生地のカロリーとそれぞれのトッピングの値段を渡されます。
値段に対してのカロリーが最大の結果を出力します。
1行目:トッピングの数
2行目:生地とトッピング値段がスペース区切り
3行目:生地のカロリー
4行目〜:トッピングの数数だけのカロリー列挙
//問3 #include <iostream> #include <fstream> #include <vector> #include <algorithm> bool sort(const int lv,const int rv) { return lv>rv; } int main() { int topi,A,B,C; std::vector<int> v; std::ifstream is("q.txt"); is >> topi; is >> A >> B; is >> C; for(int tmp,i=0;i<topi;++i) { is >> tmp; v.push_back(tmp); } std::sort(v.begin(),v.end(),sort); int now_d=A,now_c=C; int now_r = now_c / now_d; int tmp_c,tmp_d,tmp_r; for(std::vector<int>::iterator it = v.begin();it != v.end();++it) { tmp_c = now_c+*it; tmp_d = now_d+B; tmp_r = tmp_c / tmp_d; if(tmp_r > now_r) { now_c = tmp_c; now_d = tmp_d; now_r = tmp_r; } else break; } std::cout << now_r << std::endl; return 0; }
最後に
予選落ちましたねっ!
