列表

详情


NC206648. 爱买手办的张三

描述

张三非常喜欢买手办,他的每个手办都有一个和其他手办不同的愉悦值y_i,张三通过购买这些手办最后获得愉悦值Y的值是这些手办所有的愉悦值的或,即 Y = (y_1 | y_2...... | y_n), 现在张三知道了自己最后获得的愉悦值 Y,但是他不知道自己购买了多少手办,所以他想知道他最多/最少可能购买了多少手办,以及购买的每个手办的愉悦值是多少。
注:由于张三的钞能力有限,保证他最多可能购买的手办数量不会超过

输入描述

一行,一个非负整数 

输出描述

第一行: 输出一个整数  代表张三最少购买了多少手办。 接下来 行,每行一个整数,代表当前手办的愉悦值
之后一行:输出一个整数 代表张三最多购买了多少手办。 接下来 行,每行一个整数,代表当前手办的愉悦值
注:你必须输出一个递增且没有重复元素的序列,即对于

示例1

输入:

0

输出:

1
0
1
0

示例2

输入:

3

输出:

1
3
4
0
1
2
3

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 847ms, 内存消耗: 5352K, 提交时间: 2020-06-14 19:06:14

#include<iostream>
using namespace std;
int n,s=0;
int main()
{
	ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
	cin>>n;
	cout<<1<<endl<<n<<endl;
    for(int i=0;i<=n;i++) 
	if((i|n)==n)s++;
    cout<<s<<endl;
	for(int i=0;i<=n;i++) 
	if((i|n)==n)cout<<i<<'\n';
	return 0;
 }

C++(g++ 7.5.0) 解法, 执行用时: 1637ms, 内存消耗: 5304K, 提交时间: 2022-11-18 14:57:09

#include<bits/stdc++.h>

using namespace std;

int main(){
	int n,s=0;
	cin >> n;
	cout << 1 << endl << n << endl;
	for(int i=0;i<=n;i++){
		if((i | n)==n)		
        s++;
    }
    cout << s << endl;
	for(int i=0;i<=n;i++){
		if((i| n)==n)
		cout << i << endl;
	}	
	return 0;
}

C 解法, 执行用时: 474ms, 内存消耗: 7264K, 提交时间: 2021-11-17 09:27:05

#include<stdio.h>
int main(){
    int x,cnt=0,a[1000005];
    scanf("%d",&x);
    printf("1\n%d\n",x);
    for(int i=0;i!=x&&cnt<1000000;i++)
    if((i|x)==x)a[++cnt]=i;
    a[++cnt]=x;
    printf("%d\n",cnt);
    for(int i=1;i<=cnt;i++)
        printf("%d\n",a[i]);
}

Python3(3.5.2) 解法, 执行用时: 3541ms, 内存消耗: 8448K, 提交时间: 2020-06-07 20:10:47

x = int(input())
bit = []
for i in range(0, 31):
	if((x>>i)&1):
		bit.append(i)
print(1)
print(x)
up = (1<<len(bit))
print(up)
for mask in range(0, up):
	state = 0
	for i in range(0, len(bit)):
		if((mask>>i)&1):
			state |= (1<<bit[i])
	print(state)

C++ 解法, 执行用时: 1066ms, 内存消耗: 5248K, 提交时间: 2021-05-21 15:06:00

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,i;cin>>n;
	cout<<"1"<<endl;
	cout<<n<<endl;
	int s=0;
	for(i=0;i<=n;i++)
	{
		if((i|n)==n)
		s++;
	}
	cout<<s<<endl;
	for(i=0;i<=n;i++)
	if((i|n)==n)
	cout<<i<<endl;
	return 0;
}

上一题