トレーニング1 - Bのタイトル
サンクトペテルブルクの街では、日が2100分間続きます。サンクトペテルブルクの主要駅からは、列車は1分、4分、16分、というようにした後に出発します。言い換えれば、列車が各整数k≥0のための時間4Kに出発します。チームBOWWOWは、時間SSで駅に到着しており、彼らが見逃しているどのように多くの列車カウントするようにしようとしています。言い換えれば、時間SSの前に厳密に出発している列車の数。S = 20たとえば、彼らは助けにそれらを、あなたは時間を知っているだけであるため4、1で出発してきた電車を逃し、16!
数SSが先行ゼロなしでバイナリ表現であなたを与えられることに注意してください。
入力
最初の行は、先行ゼロなしで単一のバイナリ数S(0≤s<2100)を含みます。
出力
出力単一番号 - 厳密に時間SSの前に出発している列車の数。
例
入力
100000000
出力
4
入力
101
出力
2
入力
10100
出力
3
注意
最初の例= 256101000000002 = 25610 1000000002で、見逃した列車が11、44、1616及び6464.で出発した
第2の例では1012 = 5101012 = 510、列車は11と44で出発した
第三の例は、文で説明されています。
#pragma warning (disable:4996)
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
#include <vector>
#include <queue>
#include <set>
#define inf 0X3f3f3f3f
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 1e6 + 5;
string str;
int main()
{
int ans = 0;
cin >> str;
bool flag = 1;
for (int i = 1; i < str.length(); i++)
if (str[i] == '1')
{
flag = 0;
break;
}
if (str.length() % 2 == 0)
ans = str.length() / 2;
else
{
ans = (str.length() - 1) / 2 + 1;
if (flag)
ans--;
}
printf("%d\n", ans);
}
思考:
最高レベルを表すことができ、最大4進バイナリ数は、それが一つの他のビット数がゼロであることです。特に、バイナリ自体は数自体を除く、電源4である場合。