zoukankan      html  css  js  c++  java
  • CF862C Mahmoud and Ehab and the xor 题解

    Codeforces
    Luogu

    Description.

    给你一个数 \(x\) 问你能不能分解成 \(n\) 个互不相同的数,使得这 \(n\) 个数的异或和为 \(x\)

    Solution.

    Corner Case 太多了
    首先,一眼秒,直接前前 \(n-2\) 个是 \(i\),然后最后两个是 \(x\oplus 2^{17}\oplus \bigoplus_{i=1}^{n-2}i\)\(2^{17}\) 就行了。
    然后 WA,发现 \(n=1\) 的 corner case。
    然后 WA,发现 \(x=\bigoplus_{i=1}^{n-2}i\) 的 corner case。
    就考虑如果 \(x=\bigoplus_{i=1}^{n-2}i\),那肯定要把倒数第三个拉入伙来修改。
    然后 WA,发现 \(x=\bigoplus_{i=1}^{n-2}i\)\(n=2\) 的无解情况。
    然后 AC。

    Coding.

    点击查看 /jk 代码
    //是啊,你就是那只鬼了,所以被你碰到以后,就轮到我变成鬼了{{{
    #include<bits/stdc++.h>
    using namespace std;typedef long long ll;
    template<typename T>inline void read(T &x)
    {
    	x=0;char c=getchar(),f=0;
    	for(;c<48||c>57;c=getchar()) if(!(c^45)) f=1;
    	for(;c>=48&&c<=57;c=getchar()) x=(x<<1)+(x<<3)+(c^48);
    	f?x=-x:x;
    }
    template<typename T,typename...L>inline void read(T &x,L&...l) {read(x),read(l...);}//}}}
    int a[100005];
    int main()
    {
    	int n,x;read(n,x);if(n==2&&!x) return puts("NO"),0;
    	puts("YES");if(n==1) return printf("%d\n",x),0;
    	for(int i=1;i<n-1;i++) a[i]=i,x^=i;
    	if(!x) a[n]=x,a[n-1]^=1<<18,a[n-2]^=1<<18|1<<19,a[n]^=1<<19;
    	else a[n]=x,a[n]^=1<<18,a[n-1]^=1<<18;
    	for(int i=1;i<=n;i++) printf("%d%c",a[i],i==n?'\n':' ');
    	return 0;
    }
    
  • 相关阅读:
    csuoj 1111: 三家人
    csu oj 1339: 最后一滴血
    csuoj 1337: 搞笑版费马大定理
    csuoj 1334: 好老师
    csu oj 1330 字符识别?
    C++动态内存分配
    变量内存分配
    codevs 2235 机票打折
    contesthunter CH Round #64
    面试分享:一年经验初探阿里巴巴前端社招
  • 原文地址:https://www.cnblogs.com/pealfrog/p/15367040.html
Copyright © 2011-2022 走看看