C - Energy Drink Collector
問題
考察
値段が低いもの順に昇順ソートして、低いものから買える分だけ買った値段を出力すればおーけー。
値段と本数ペアでソートしたいので、vector
実装
#include<iostream> #include <vector> #include <algorithm> #include <map> #define ll long long using namespace std; int main() { ll n, m; cin >> n >> m; vector<pair<ll, ll> > pairs(n); for (ll i = 0; i < n; i++) { ll a, b; cin >> a >> b; pairs[i] = make_pair(a, b); } // firstが小さい順、secondが小さい順にソート sort(pairs.begin(), pairs.end()); ll ans = 0; for (int i = 0; i < n; i++) { if (pairs[i].second < m) { m -= pairs[i].second; ans += pairs[i].first * pairs[i].second; } else { ans += m * pairs[i].first; cout << ans << endl; return 0; } } }
とても便利なpair
RUPC2019 Day1参加記
初オンサイトに行ってきた。
立命館の競プロサークルが主催されている立命館大学競技プログラミング合宿に参加してきました。
レート茶色だったり、初めてだったりで躊躇していましたが、けんちょんさんはじめ、強い方々が
一堂に会する場にいけるのは貴重だと思い、参加しました。
Day2,3は急用でいけなくなりましたが色々思うことがあったので、書き記します。
コンテスト前
参加者の平均レートは水色くらいでつよつよな人しかいませんでした。
少し時間があったので、尊敬しているけんちょんさんとprdさんに挨拶しました。
お二人とも柔和な雰囲気で優しさに溢れていました。社会人なっても時間作って
競プロしているのは尊敬して止みません。
けんちょんさんは新しい記事を考案中だそうです。楽しみだなあ。
コンテスト
ぼっち参加だったのでランダムでチーム編成を行い、りあんさんとみかんさんとチームを
組ませていただきました。コンテスト直前に担当する問題分けをチームで話したりしました。
チームで競プロするってなんかいいなって思いました。
問題
A問題
ぼくが担当しました。
簡単な算数でしたが、サンプル3で詰まっちゃいました。
りあんさんが「そのままじゃない?」との神の助言をいただきなんとかACしました。
#include<iostream> #include<vector> #include<cstdio> #include<string> #include<algorithm> using namespace std; int main() { int h, w, a, b; cin >> h >> w >> a >> b; if (h < a || w < b) { cout << h * w << endl; return 0; } int x = (h % a)* w + (w % b) * h - (h % a) * (w % b); cout << x << endl; }
B問題
入力される文字が(T, F)の順序のときのみ、Fに変換。そのほかはTに変換する処理を書けば、OK。
みかんさんがきれいに実装してました。
C問題
頭で考えず、手で動かして実験する問題でした。つよい人は手を動かすのが早い。
C,
— satanic@競プロ🔥 (@satanic0258) 2019年3月5日
とりあえずオセロしてみよう
→(画像ができる)ん,もう操作できなくないかこれ
→個数を見ると48個
→おっサンプルの[1,1]x[8,8]と一致してるじゃ~ん pic.twitter.com/xd8DdG01Qj
シュミレーションすると上の画像みたいになるそうです。
りあんさんが爆速で解いてました。
D~G問題
難しすぎるのでパス。
コンテスト総評
しっかりオンサイトで楽しむには最低水レートは必要だなあとひしひしと
感じました。チームで考察あーだこーだ言ったり、ペアプログラミングしてみたいなあ。
全完して喜んでいるチームを見て青春を感じたので、ぼくもチームで
大会出て活躍したいです。
おわりに
にぼおいしかった。
精進するぞ!
AtCoder Beginner Contest 120
A問題
b ÷ aがcより少なければb ÷ a 出力
それ以外ならcで満足するのでcを出力
#include <iostream> #include <numeric> #include <string> #include <vector> #include <algorithm> #include <sstream> #include <iterator> #include <math.h> #include <cmath> #include <set> #include <bitset> #include <cstdio> #include <iostream> #include <iomanip> #include <queue> #include <boost/math/common_factor_rt.hpp> #define ll long long using namespace std; ll l = 1000000007; int main() { int a, b, c; cin >> a >> b >> c; if (c < b / a) { cout << c << endl; } else { cout << b / a << endl; } }
B問題
AとBを素因数分解して同じ数字を取り出して配列にいれる。
降順に並べて配列のK-1番目を出力すればおけ
考察すぐできたのに実装が重すぎる・・
#include <iostream> #include <numeric> #include <string> #include <vector> #include <algorithm> #include <sstream> #include <iterator> #include <math.h> #include <cmath> #include <set> #include <bitset> #include <cstdio> #include <iostream> #include <iomanip> #include <queue> #include <boost/math/common_factor_rt.hpp> #define ll long long using namespace std; ll l = 1000000007; vector<int> a[1000] = {}; vector<int> b[1000] = {}; vector<int> ans[1000] = {}; int main() { int A, B, K; cin >> A >> B >> K; a->push_back(1); b->push_back(1); int x = A; int y = B; for (int i = 2; i <= A; i++) { if(A%i == 0) { a->push_back(i); } } for (int i = 2; i <= B; i++) { if (B%i == 0) { b->push_back(i); } } if (a->size() >= b->size()) { for (int i = 0; i < a->size(); i++) { for (int j = 0; j < b->size(); j++) { if (a->at(i) == b->at(j)) { ans->push_back(a->at(i)); } } } } else { for (int i = 0; i < b->size(); i++) { for (int j = 0; j < a->size(); j++) { if (b->at(i) == a->at(j)) { ans->push_back(b->at(i)); } } } } int s = ans->size() - 1; sort(ans->begin(), ans->end(), greater<int>()); cout << ans->at(K - 1) << endl; }
C問題
01か10の場合どっちを消せばいいのかみたいな判定いるかと思ったけど、
箱をソートしてしまえば最も多く消せる数値がわかる。
出力は赤と青で少ない方の2倍を出力すればおけ
なんだか簡単だし嘘解法な気する。
#include <iostream> #include <numeric> #include <string> #include <vector> #include <algorithm> #include <sstream> #include <iterator> #include <math.h> #include <cmath> #include <set> #include <bitset> #include <cstdio> #include <iostream> #include <iomanip> #include <queue> #include <boost/math/common_factor_rt.hpp> #define ll long long using namespace std; ll l = 1000000007; vector<char> s; int main() { ll z = 0, o = 0; string S; cin >> S; for (ll i = 0; i < S.size(); i++) { s.push_back(S.at(i)); } for (ll i = 0; i < s.size(); i++) { if (s.at(i) == '0') { z++; } else { o++; } } if (z >= o) { cout << o * 2 << endl; } else { cout << z * 2 << endl; } }
Dはわからず・・・
C問題安定してきた