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問題安定してきた