ABC338
概要
A - Capitalized?
考えてたこと
少し悩みましたが、一文字目だけ取ってきてisUpper, 残りをisLowerで判別。
提出したもの
a.cpp
int main() {
string s;
cin >> s;
bool ans = isupper(s[0]);
for (int i = 1; i < s.size(); i++) {
if (!(islower(s[i]))) {
ans = false;
}
}
if (ans) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
return 0;
}
振り返り
他にも大文字 -> 小文字の順に辞書順で並ぶからそれを活かして...とかも考えたけど上のやり方が一番楽そう?
B - Frequency
考えてたこと
アルファベット26文字で入力1000文字だから気合いでなんとかなる、あとはアルファベット順を早いものを出力するように注意するだけ。
提出したもの
b.cpp
int main() {
string s;
cin >> s;
char ans;
int ans_max = 0;
map<char, int> cnt;
fore(a, s) {
if (cnt.count(a)) {
cnt[a]++;
} else {
cnt[a] = 1;
}
if (ans_max < cnt[a]) {
ans_max = cnt[a];
ans = a;
} else if (ans_max == cnt[a] && a < ans) {
ans = a;
}
}
cout << ans << endl;
return 0;
}
振り返り
これが一番簡単そう。
C - Leftover Recipes
考えてたこと
A,Bのそれぞれの人数を全探索してたら間に合わないだろうなぁ...最大だから片方全探索してもう片方の最大値だけ常に求めれば良いかなぁ...と考えたら大体そんな感じだった問題。
提出したもの
c.cpp
int main() {
ll n;
cin >> n;
vector<ll> vec_q, vec_a, vec_b;
rep(i, 0, n) {
ll q;
cin >> q;
vec_q.push_back(q);
}
rep(i, 0, n) {
ll a;
cin >> a;
vec_a.push_back(a);
}
rep(i, 0, n) {
ll b;
cin >> b;
vec_b.push_back(b);
}
// 作った人数分の料理
ll ans = 0;
ll a_max;
ll b_max = 100100100;
// Aの人数を回すfor文
for (ll i = 0; i <= 1000000; i++) {
a_max = i;
// 材料を回すfor文
for (ll j = 0; j < n; j++) {
if (vec_q[j] >= vec_a[j] * i) {
if (vec_b[j] != 0) {
b_max = min((vec_q[j] - vec_a[j] * i) / vec_b[j], b_max);
}
} else {
break;
}
if (j == n - 1) {
ans = max(ans, a_max + b_max);
}
}
}
cout << ans << endl;
return 0;
}
振り返り
料理の必要グラムが0のパターンがあることに気づいてなかったことと、気づいた上でそれを処理に入れるのに結構苦戦した。
感想
Dが水色...またの機会に解きます。一旦は緑までは解説読んで解くことを目標に。