zoukankan      html  css  js  c++  java
  • 862C

    原题链接:http://codeforces.com/contest/862/problem/C

    题意:给出n,x,求n个不同的数,使这些数的异或和为x

    思路:(官方题解)只有n==2&&x==0时输出NO,接下来考虑YES的情况

    先定义一个数pw=217(输出答案时保证不会出现重复数字)

    因为 数x 完全可以由三个数异或得到,那么对于n>3的情况,先求1到n-3的异或和,得到y,如果y==x,那么剩下三个数为pw, pw*2, pw^(pw*2)(当x==0时,0, pw,pw^x的输出是不符合题意的),否则输出0, pw,pw^x^y。

    n<=3的情况可以直接输出。

    AC代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 const int MAXN=1e5+10; 
     6 const int pw=1<<17;
     7 int main()
     8 {
     9     int n,x;
    10     scanf("%d %d", &n, &x);
    11     if(n==2&&x==0)printf("NO
    ");
    12     else 
    13     {
    14         printf("YES
    ");
    15         if(n==1) printf("%d
    ", x);
    16         else if(n==2) printf("%d %d
    ", 0, x);
    17         else if(n==3) printf("%d %d %d
    ", pw^x, pw<<1, pw^(pw<<1));
    18         else
    19         {
    20             int res=1;
    21             printf("%d", 1);
    22             for(int i=2;i<=n-3;i++){
    23                 res^=i;
    24                 printf(" %d", i);
    25             }
    26             if(res==x){
    27                 printf(" %d %d %d
    ", pw, pw<<1, pw^(pw<<1));
    28             }
    29             else {
    30                 //cout<<'*'<<endl;
    31                 printf(" %d %d %d
    ", 0, pw, pw^x^res);
    32             }
    33         }
    34     }
    35     return 0;
    36 }
  • 相关阅读:
    CF343D Water Tree
    CF340B Maximal Area Quadrilateral
    测试环境/生产环境,接口地址配置
    json-server MOCK方案
    vscode prettier保存代码时自动格式化
    蓝鲸6.0前置准备
    nginx日志提取案列
    蓝鲸模拟考试
    部署维护
    第一次模拟考
  • 原文地址:https://www.cnblogs.com/MasterSpark/p/7560939.html
Copyright © 2011-2022 走看看