【題目敘述】https://zerojudge.tw/ShowProblem?problemid=e638
【解題想法】
- 二進制的第 n 位數為 1 時,該數字的值要加上 2 ^ n
- 2 ^ (n+1) = (2 ^ n) * (2 ^ n)
- (a * b) % MOD = ( (a % MOD) * (b % MOD) ) % MOD
- (a + b) % MOD = ( (a % MOD) + (b % MOD) ) % MOD
#include <iostream>
using namespace std;
#define MOD 131071
int main() {
string s, buf;
while (cin >> buf){
s = buf;
while (buf[buf.size()-1] != '#'){
cin >> buf;
s += buf;
}
long long mul = 2;
long long ans = s[s.size()-2] - '0';
for (int i = s.size()-3; i >= 0; i--){
if (s[i] == '1'){
ans += mul;
ans %= MOD;
}
mul *= mul;
mul %= MOD;
}
if (ans) cout << "NO\n";
else cout << "YES\n";
}
return 0;
}