【題解】ZeroJudge e638: 10176 – Ocean Deep! Make it shallow!!

【題目敘述】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;
}
分享本文 Share with friends