列表

详情


NC54785. 小民与C语言 II

描述

小民今天在C语言课上学习了位运算。
他写了一段程序,先读入了一个长度为n的整数数组ar,接着运行了以下代码:

int n, x, i; for(i = x = 0; i < n; ++ i)     x ^= ar[i];

他在控制台查看了x的值,然后发现他居然把输入文件误删了!
关于数组ar,除了长度n,小民还记得:
1) 数组中的每个数都是小于的非负整数;
2) 数组的第一个数为c。

因为小民记忆力不佳,他想知道是否存在数组ar满足他的记忆,你能帮帮他吗?


输入描述

第一行包含4个整数n x b c,含义见题




输出描述

输出一行,包含n个整数,表示ar的值,整数间用一个空格隔开

若不存在符合要求的ar,输出-1

若存在多组解,输出第2个位置值最小的解,若第2个位置值相等,输出第3个位置值最小的解,以此类推

示例1

输入:

1 12 4 12

输出:

12

原站题解

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

Java 解法, 执行用时: 62ms, 内存消耗: 11240K, 提交时间: 2022-10-25 14:54:20

import java.util.Scanner;

/**
 * @author 李豪峰
 * @date 2022/10/24 20:07
 */
public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int x = sc.nextInt();
        int b = sc.nextInt();
        int c = sc.nextInt();
        if (x > Math.pow(2, b)) {
            System.out.println(-1);
            return;
        }

        System.out.print(c + " ");
        if (n != 1) {
            for (int i = 1; i < n - 1; i++) {
                System.out.print("0 ");
            }
            System.out.println(x^c);
        }
    }
}

C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 504K, 提交时间: 2019-11-30 13:12:39

#include<iostream>
#include<math.h>
using namespace std;
int main(){
    int  n,x,b,c;
    cin>>n>>x>>b>>c;
    int h=2<<(b-1);
    int l=x^c;
    if( h<c || h<l ){
        cout<<-1<<endl;
        return 0;
    }
    if( n==1 ){
        if( x!=c ){
            cout<<-1<<endl;
        }else{
            cout<<c<<endl;
        }
        return 0;
    }
    if( l<h ){
        cout<<c<<" ";
        for(int i=1;i<=n-2;i++){
        cout<<0<<" ";
        }
        cout<<l<<endl;
     }
    return 0;
}

C++(clang++11) 解法, 执行用时: 7ms, 内存消耗: 408K, 提交时间: 2020-11-28 11:59:19

#include<iostream>
#include<math.h>
using namespace std;
int A[1001];
int main()
{
	int n,x,b,c;
	cin>>n>>x>>b>>c;
	if(x>pow(2.0,b))
	{
		cout<<-1<<endl;
		return 0;
	}
	if(n==1)
	{
		cout<<x<<endl;
	}
	else
	{
		cout<<c<<" ";
		for(int i=2;i<n;i++)
		{
			cout<<0<<" ";
		}
		cout<<(x^c)<<endl;
	}
	return 0;
}

Python3(3.5.2) 解法, 执行用时: 42ms, 内存消耗: 3448K, 提交时间: 2019-11-30 23:16:10

n, x, b, c = map(int, input().split())
if x >= 2 ** b:
    print(-1)
else:
    print(c, end = '')
    if n > 1:
        print((n - 2) * ' 0', str(c ^ x))

上一题