列表

详情


NC217332. 反复读密码锁

描述

题目描述

比那瑞星人把你锁在了一个房间里圈养,用“比那瑞锁”将唯一的出口锁住,这个锁只有0,1两个按键,密码也只有0,1两个数字,一个密码用一次就会自动重置,难道这就是传说中的一次一密?你列出了每次他输入的每一个数字:
01101001100101101001011001101001...
突然醍醐灌顶,初始时,序列为空,其生成的规律是这样的:

你想知道这个密码锁第n次使用,下一个密码是什么。

输入描述

第一行是一个整数,表示测试数据组数。
接下来的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))

上一题