ARC 088

C

何回2倍できるかを数える

#include <bits/stdc++.h>
 
#define REP(i,n) for(int i=0; i<(int)(n); ++i)
#define FOR(i,k,n) for(int i=(k);i<(int)(n);++i)
typedef long long int ll;
using namespace std;
 
int main(void) {
    ll X, Y;
    cin >> X >> Y;
    int ans = 0;
    while(X <= Y) {
        X *= 2;
        ans++;
    }
    cout << ans << endl;
}

Submission #1895699 - AtCoder Regular Contest 088

D

文字列長をn、0と1が切り替わるところをk(1-indexed)としたとき、max(k, n-k)の最大値が答え。全ての文字が同じ場合はnが答え。

#include <bits/stdc++.h>
 
#define REP(i,n) for(int i=0; i<(int)(n); ++i)
#define FOR(i,k,n) for(int i=(k);i<(int)(n);++i)
typedef long long int ll;
using namespace std;
 
int main(void) {
    string S;
    cin >> S;
    int n = S.size();
    int ans = n;
    for(int k=0; k<n; ++k) {
        if(S[k] != S[k+1]) {
            ans = min(ans, max(k+1, n-k-1));
        }
    }
    cout << ans << endl;
}

Submission #1902173 - AtCoder Regular Contest 088