首页 > 其他分享 >Codeforces Round #628 (Div. 2)——D(二进制,构造,思维)

Codeforces Round #628 (Div. 2)——D(二进制,构造,思维)

时间:2022-10-17 11:22:37浏览次数:79  
标签:10 int ll 628 Codeforces 数组 长度 Div define

https://codeforces.com/problemset/problem/1325/D

题目大意

给你 \(u,v\) 两个数,叫你构造出最短的数组,满足所有的异或等于 \(u\), 所有的和等于\(v\)

思路

首先我们可以发现,数组的长度不超过3,因为 \(u, x,x\) \((x=(u-v)/2)\) 一定满足要求,
我们设u ^ x ^ x =u, u+x+x=v, 即可解出\(x=\frac{v-u}{2}\) , 但不一定是最短的。

  1. 长度为0:\(u=v=0\)
  2. 长度为1:\(u=v\)
  3. 长度为2:我们不妨考虑,合并\(u\)和\(x\), 现在的数组为x^u, x, 如果满足x^u+x = v,那么就输出这个数组
  4. 长度为3:就是u,x,x

代码

点击查看代码
/*
 * @Descripttion: 
 * @Author: Echo
 * @version: 
 * @Date: 2022-10-17 10:33:46
 * @LastEditors: Echo
 * @LastEditTime: 2022-10-17 11:12:47
 */
#include <bits/stdc++.h>
#define rep(i,x,y) for(int i=x; i<=y; ++i)
#define per(i,x,y) for(int i=x; i>=y; --i)
#define mem(a,b) memset(a, b, sizeof a)
#define INF 0x3f3f3f3f
#define ll long long
#define pushk push_back
using namespace std;

int main()
{
    ll u,v;
    cin>>u>>v;
    ll tmp = (v-u)/2;
    if(u>v || ((v-u)&1)) puts("-1");
    else if(u==v && v==0) puts("0");
    else if(u==v) cout<<1<<'\n'<<u<<'\n';
    else if((tmp^u)+tmp==v) cout<<2<<'\n'<<tmp<<" "<<(u^tmp);
    else cout<<3<<'\n'<<u<<" "<<tmp<<" "<<tmp<<'\n';
    return 0;
}

标签:10,int,ll,628,Codeforces,数组,长度,Div,define
From: https://www.cnblogs.com/Jin-yt/p/16798543.html

相关文章

  • Divisibility by 2^n
    Problem-D-Codeforces题意:给定数列a1,a2,....an令ans=a1*a2*a2*....an每次可以选择一个i(只能选一次),使得ai=ai*i若操作后存在(2^n)|ans,输出最小的操作次数,否则输出-......
  • CF1628D1 Game on Sum (Easy Version)
    CF1628D1GameonSum(EasyVersion)-洛谷|计算机科学教育新生态(luogu.com.cn)个人认为博弈论的板子题。首先\(k\)就是个障眼法。当\(k\)变化的时候,Alice选......
  • Codeforces Round #828 (Div. 3)
    E2.DivisibleNumbers(hardversion)用pollardrho跑出\(ab\)的质因数分解,然后dfs枚举\(ab\)的所有因子对\(x,y\),如果存在\(k_1,k_2\)使得\(a<k_1x\le......
  • Codeforces Round #748 (Div. 3) E
    E.GardenerandTree显然我们对于每一个叶节点是度数为1的我们如果删除外层叶节点的时候显然也要改变与他与他连接的节点的度数而只有可以能在这些节点里诞生新的叶节......
  • Codeforces Round #752 B
    B.ModerateModularMode先列式子n=k1x+by=k2n+b我们把第二个式子n单独提出来(y-b)/k2=k1x+by=k1k2x+(k2+1)b因为题中给出xy都是偶数显然我们可以构造k1=1k2=1......
  • [题解] Codeforces Global Round 23 1746 A B C D E1 F 题解
    点我看题求点赞A.Maxmina首先序列全0的情况肯定是NO。否则,如果\(k\ge3\),则在序列中随便找一个1,把他左边和右边分别用第一种操作不断缩,直到序列长度为k为止,最后用一次2......
  • Codeforces Global Round 23
    A.Maxmina显然结果全为0时,结果为NO,若有1,我们通过操作1使长度变为k,里面包含至少1,通过操作2,结果即为YES1#include<bits/stdc++.h>2usingnamespacestd;3consti......
  • Codeforces Global Round 23题解
    T1link大水题,不想说最后一定可以把一个序列消成长度为\(k\)的带一序列,前提是其原来就有一所以贪心就是如果有一,就行,反之不行codeT2linkwssb,考试的时候居然想了大......
  • Codeforces Global Round 23 (A-E1)个人题解
    A-Maxmina给定一个01串,我们可以将k个数变为他们的最大值(k个数变成1个数),或者将相邻的两个数变为他们的最小值(2个数变成1个数),询问是否可以将这个01串变成仅含有一个1的......
  • Codeforces Global Round 23 题解
    ContestLink我是智障。A.MaxminaProblemLink显然当数组中全是\(0\)的时候,最后不可能变成\(1\),因为我们只有相邻取\(\min\)和区间取\(\max\)两种操作,并没有任......