頭良くなりたい人

文系大学生shadeのブログです。競技プログラミングや人文学の話題,受験ネタなど。

Boot camp for Beginners

ABC116 B - Collatz Problem

問題はこちら atcoder.jp 方針 「コラッツの問題」を題材にした問題です。私は数学には詳しくないので名前は知りませんでしたが,これを題材にした入試問題を見たことがあります。 例を見れば分かりますが, になった後は の繰り返しになっています。どのよ…

ABC094 B - Toll Gates

問題はこちら atcoder.jp 方針 ごちゃごちゃした問題文ですが,求めるコストは から までにある料金所の数と, から までにある料金所の数のうち小さい方です。 コード #include <bits/stdc++.h> using namespace std; int main(){ int n,m,x; cin>>n>>m>>x; vector<int> a(m); f</int></bits/stdc++.h>…

ABC122 B - ATCoder

問題はこちら atcoder.jp 方針 は高々10文字なので,考えられる の部分文字列をすべてチェックしています。 コード #include <bits/stdc++.h> using namespace std; int main(){ string s; cin>>s; string subs; int length=0; for(int i=0; i</bits/stdc++.h>

ABC142 C - Go to School

問題はこちら atcoder.jp 方針 問題文を読むと,出席番号 番の生徒は 番目に登校したことが分かります。つまりこれを変換して, 番目に登校した生徒の出席番号 を出力する配列を作れば終わりなのですが,ここで頭が混乱してしまいました。ということでC++の…

ABC138 C - Alchemist

問題はこちら atcoder.jp 方針 「最後に残る具材の価値を最大にしたい」ということは,「 回目の操作で最も価値の大きい2つを鍋に投入したい」ということです。 鍋に入れられた具材の影響力は回数を経るごとに で割られて小さくなっていくので,価値の小さい…

ABC132 C - Divide the Problems

問題はこちら atcoder.jp 方針 題意の を値の小さい順に並べ替えると,求める の個数は, より大きく, 以下である整数の個数に等しい。簡単な問題なんですが,僕は最初 for(int i=d[n]; i<d[n-1]+1; i++){ int arc=0,abc=0; for(int j=0; j<n; j++){ if(d[j]>=i){ arc++; }else{ abc++; } } if(arc==abc){ count++; } } こんな</d[n-1]+1;>…

ABC161 C - Replacing Integer

問題はこちら atcoder.jp 方針 例3が見るからにTLEを誘っているので,馬鹿正直に題意の操作をするのは断念。 のとき,題意の操作により は となっていきます。 となるまでこの操作を続ける( を で割り切れなくなるまで割る)と,( : を で割った余り)とな…

AGC014 A - Cookie Exchanges

問題はこちら atcoder.jp 方針 言われた操作を記述するだけですが,while内を単に … a=b/2+c/2; b=c/2+a/2; c=a/2+b/2; … などとしてしまわないように注意。きれいな漸化式なのでやりたくなります。 「無限回操作が行える 有限回の操作後,初期状態に戻る」…

ABC160 C - Traveling Salesman around Lake

問題はこちら atcoder.jp 方針 一番距離の遠い家と家の間を避けて湖を一周すればいいです。 と の間は原点を通るので別で計算しています。 コード #include <bits/stdc++.h> using namespace std; int main(){ int k,n; cin>>k>>n; vector<int> a(n); for(int i=0; i<n; i++){ cin>>a.at(i); } </n;></int></bits/stdc++.h>…

ABC068 B - Break Number

問題はこちら atcoder.jp 方針 特に難しい点はありませんが, のとき が出力されないよう変数maxを で初期化しています。 コード #include <bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; int count_max=0; int max=1; // 求める整数 for(int i=1; i<n+1; i++){ int count=0; int j=i; while(j%2==0){ j/=2; count++; } if(count>coun</n+1;></bits/stdc++.h>…

ABC088 B - Card Game for Two

問題はこちら atcoder.jp 方針 与えられた を大きい順にソートして,交互に取ってもらっています。 コード #include <bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; vector<int> a(n); for(int i=0; i<n; i++){ cin>>a.at(i); } int alice=0,bob=0; // aの要素を大きい順に</n;></int></bits/stdc++.h>…

ABC074 B - Collecting Balls (Easy Version)

問題はこちら atcoder.jp 方針 「これら 台のロボットのうちいくつかを起動して」なんて言われると身構えてしまいますが,各 に対して,ボールと近い方のロボットを起動するだけですね。 コード #include <bits/stdc++.h> using namespace std; int main(){ int n,k; cin>>n</bits/stdc++.h>…

ABC086 B - 1 21

問題はこちら atcoder.jp 方針 と を数値として受け取るか文字列として受け取るか迷いましたが,数値だと桁数による場合分けが必要な解法しか思いつかなかったので文字列扱いにしています。 string型で受け取ってもstoi関数でint型に変換できるので便利です…

ABC157 B - Bingo

問題はこちら atcoder.jp 指針 例によってスマートな解き方が分かりません。数字表と判定表の2つのビンゴシートを作って穴が開く場所を先に調べ,後からビンゴの成立を調べています。本問は のビンゴなので何でもないですが, だったりした場合にはビンゴの…

パナソニックプログラミングコンテスト2020 B - Bishop

問題はこちら atcoder.jp 指針 問題を読んでもあまり意味が分かりませんが,よくよく例を見てみれば,左上端(初期位置)を としたとき, の と の偶奇が一致するマス目に印がつくことになりそうです。文中の条件式からも と の偶奇が一致しないマス目には行…

三井住友信託銀行プログラミングコンテスト2019 B - Tax Rate

問題はこちら atcoder.jp 指針 こういう小数の処理にはかなり苦手意識があります。 とりあえず で仮の を出しておいて,その で逆算してうまく行かなければ と を試してます。 センスがないコードでごめんなさい。 コード #include <bits/stdc++.h> using namespace std; in</bits/stdc++.h>…

ABC139 B - Power Socket

問題はこちら atcoder.jp 指針 特に言うことはないです。指示通り。 コード #include <bits/stdc++.h> using namespace std; int main(){ int a,b; cin>>a>>b; int socket=1; int i=0; while(socket</bits/stdc++.h>

CODE FESTIVAL 2016 qual B B - Qualification simulator

問題はこちら atcoder.jp 指針 問題文中の 国内の学生は、現在予選の通過が確定した参加者がA+B人に満たなければ、予選を通過する 海外の学生は、現在予選の通過が確定した参加者がA+B人に満たず、さらに海外の学生の中での順位がB位以内なら、予選を通過す…

ABC121 B - Can you solve this?

問題はこちら atcoder.jp 指針 問題文の通り。 コード #include <bits/stdc++.h> using namespace std; int main(){ int n,m,c; cin>>n>>m>>c; vector<int> b(m); for(int i=0; i<m; i++){ cin>>b.at(i); } vector<vector<int>> a(n,vector<int> (m)); for(int i=0; i<n; i++){ for(int j=0; j<m; j++){ cin>>a.at(i).at(j); } } int count=0;…</n;></int></vector<int></m;></int></bits/stdc++.h>

ABC156 C - Rally

問題はこちら atcoder.jp 指針 スマートな方法が思いつかなかったのでローラー作戦。 なのでそれでも問題なさそう。問題文通りに整数 と配列 を宣言して, の最小の要素から最大の要素までの範囲で を動かし,求める最小値を出しました。 コード #include <bits/stdc++.h> u</bits/stdc++.h>…