NC217332. 反复读密码锁
描述
比那瑞星人把你锁在了一个房间里圈养,用“比那瑞锁”将唯一的出口锁住,这个锁只有0,1两个按键,密码也只有0,1两个数字,一个密码用一次就会自动重置,难道这就是传说中的一次一密?你列出了每次他输入的每一个数字:
01101001100101101001011001101001...
突然醍醐灌顶,初始时,序列为空,其生成的规律是这样的:
输入描述
第一行是一个整数,表示测试数据组数。
接下来的T行,每行一个数字,表示含义见题目描述。
输出描述
一共T行,每行一个0或者1.
示例1
输入:
2 0 11
输出:
0 1
示例2
输入:
1 8589934593
输出:
0
说明:
如果是跟样例不一样的话建议上网现重学类型表达范围。Kotlin(1.4.10) 解法, 执行用时: 101ms, 内存消耗: 19044K, 提交时间: 2021-01-16 14:11:38
import java.util.* fun main() { val read = Scanner(System.`in`) val t = read.nextInt() for (i in 1..t) { val n = read.nextLong() f(n) } } fun f(n: Long) { val r = java.lang.Long.bitCount(n) % 2 println(r) }
C(clang11) 解法, 执行用时: 2ms, 内存消耗: 376K, 提交时间: 2021-01-16 14:29:46
#include<stdio.h> int main(){ int t; scanf("%d", &t); while(t--){ long long x, cnt=0; scanf("%lld", &x); x++; for(;;){ if(x == 1)break; if(x%2 == 1)x++,cnt++; else x/=2,cnt++; } printf("%lld\n", cnt%2); } return 0; }
C++(clang++11) 解法, 执行用时: 2ms, 内存消耗: 360K, 提交时间: 2021-01-17 00:28:44
#include<stdio.h> int main() { int T; scanf("%d",&T); while(T--) { long long n; scanf("%lld",&n); int ans=0; while(n) { if(n%2) ans++; n/=2; } ans%=2; printf("%d\n",ans); } }
pypy3(pypy3.6.1) 解法, 执行用时: 63ms, 内存消耗: 51940K, 提交时间: 2021-01-16 15:22:20
def solve(n): if n==0: return 0 elif n%2==0: return solve(n//2) else: return 1-solve(n//2) t=int(input()) while t>0: n=int(input()) print(solve(n)) t-=1
Python3(3.9) 解法, 执行用时: 22ms, 内存消耗: 2808K, 提交时间: 2021-01-16 14:27:23
def solve(K): return bin(K).count('1') % 2 T = int(input()) for t in range(T): n = int(input()) print(solve(n))