南阳热省赛A——找规律——Googol String
仔细观察就会发现K = pow(2, m) + pow(2, m-1) 数要翻转一次
/************************************************ * Author :Powatr * Created Time :2015/10/20 18:06:07 * File Name :A.cpp ************************************************/ #include <cstdio> #include <algorithm> #include <iostream> #include <sstream> #include <cstring> #include <cmath> #include <string> #include <vector> #include <queue> #include <deque> #include <stack> #include <list> #include <map> #include <set> #include <bitset> #include <cstdlib> #include <ctime> using namespace std; #define lson l, mid, rt << 1 #define rson mid + 1, r, rt << 1 | 1 typedef long long ll; const int MAXN = 1e5 + 10; const int INF = 0x3f3f3f3f; const int MOD = 1e9 + 7; long long Pow(int n) { long long res = 1; for(int i = 1; i <= n; i++) res *= 2; return res; } int solve(long long k) { int cout1 = 0; while(1){ int m = log(k) / log(2); if(Pow(m) + Pow(m-1) == k){ cout1++; k -= Pow(m); } else k -= Pow(m); if(k == 1||k == 0) break; } if(cout1 % 2 == 1) return 1; return 0; } int main(){ int T; long long k; scanf("%d", &T); for(int cas = 1; cas <= T; cas++){ scanf("%lld", &k); printf("Case #%d: ", cas); int ans = solve(k); printf("%d\n", ans); } return 0; }