AtCoder Beginner Contest 120(ABC120)3完
自分の考察まとめとして、コンテスト中に解けた問題までブログを書くことにしました!氷河期以外はなるべく続けて行こうと思います!
A - Favorite Sound
問題文
高橋くんは、自動販売機でジュースを買ったときの音が好きです。
その音は 回 円で聞くことができます。
高橋くんは 円持っていますが、お気に入りの音を 回聞くと満足するため、 円で最大 回まで聞けるだけ聞きます。
高橋くんはお気に入りの音を何回聞くことになるでしょうか。
制約
- 入力は全て整数である。
考察
この問題は、「所持金を全て使って音を聞ける回数」と「聞くと満足する音の回数」の小さい方の値が答えとなります。
所持金を全て使って音を聞ける回数は、int型同士の割り算の特徴である「切り捨て」
ex) (int)5/2==2
を使うことによって、「所持金を全て使って音を聞ける回数」は「b/a」と書くことができます。
実装例
B - K-th Common Divisor
問題文
正整数 が与えられます。
も も割り切る正整数のうち、 番目に大きいものを求めてください。
なお、与えられる入力では、 も も割り切る正整数のうち 番目に大きいものが存在することが保証されます。
制約
- 入力は全て整数である。
- も も割り切る正整数のうち、 番目に大きいものが存在する。
考察
まず制約がA,B<=100なので、約数全列挙などせずに101から1まで順にAをhogeで割った余りが0&&Bを割った余りが0の時をカウントしながら全探索すればよさそう。
ここで注意したいのが、AもBも割り切れる正整数のうちK番目に大きいものを出力しなければならないところ。これに引っかかって実装しなおした人多いのでは?(私もです)勝手に頭の中で小さい順に書き換えてしまう癖は良くないですね!ちゃんと問題文は読みましょう(自戒)
実装例
C - Unification
問題文
机の上に 個のキューブが縦に積まれています。長さ の文字列 が与えられます。
下から 番目のキューブの色は、 の 文字目が 0
のとき赤色、1
のとき青色です。
あなたは、赤色のキューブと青色のキューブが隣り合っているような部分を選んで、それら 個のキューブを取り除く操作を何度でも行えます。
このとき、取り除いたキューブの上にあったキューブは真下の物体の上に落下します。
最大で何個のキューブを取り除けるでしょうか。
制約
- の各文字は
0
または1
である。
考察
違う色が重なったときに、2個のキューブを消すらしい。
ということは、先頭から順に配列を見ていって、赤(青)が来たときに、それまでに消えていない別の色 青(赤)が1つでもあれば「取り除けるキューブ+=2」と「青(赤)の残り個数のカウント-=1」を、全くない場合(0個のとき) 現在参照している色 「赤(青)の残り個数のカウント+=1」していけばよさそう
実装例
感想
今回は3完14:07で787位でした。
目標にしていた全完はまたも叶わず、、、 いつ全完できるんだか、、、
次回のコンテストはAGCなので早解きでワンチャンレートが上がればいいなーという体で参加したいと思います。(ただ参加者のレベルが上がっているので1完じゃあ厳しいかな...)
水色に早くなりたい!!!!!!!!(あと+265)
記事を見てくださりありがとうございました
ご意見や間違い等ございましたら、コメントよろしくお願いします!!
||||>||#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define INF 1e18
bool comp(const pair<int,int>& a,const pair<int,int>& b){
return a.second<b.second;
}
int main(){
ll a,b,c;
cin>>a>>b>>c;
cout<<min(c,b/a)<<endl;