首页 > 其他分享 >Educational Codeforces Round 157 D

Educational Codeforces Round 157 D

时间:2023-11-10 14:26:04浏览次数:40  
标签:该位 Educational 157 int 个数 Codeforces 异或 b1

tilian
不太会这种题
发现找到一个数就能确定整个序列
然后转而发现 前缀异或和
b1 ^ b2 = a1
b1 ^ b3 = a2
...
我们发现要是n为偶数时能直接求出b1从而确定整个序列
而为奇数时我们无法确定b1
我们思考拆位之后 如果b1该位为0 算出真实的异或后的0 1 个数 b1该位为1 算出真实的异或后的0 1 个数
再与a1 a2 a3 该位上的0 1 个数看是否符合即可

int n,a[200010];
void solve() {
    cin>>n;
    for(int i=0;i<n-1;i++)cin>>a[i];
    for(int i=1;i<n-1;i++)a[i]^=a[i-1];
    int x=0;
    for(int i=0;i<20;i++){
        vector<int>cnt(2),res(2);
        for(int j=0;j<n;j++)res[j>>i&1]++;
        for(int j=0;j<n-1;j++)cnt[a[j]>>i&1]++;
        if(cnt[1]!=res[1])x|=1<<i;
    }
    cout<<x<<' ';
    for(int i=0;i<n-1;i++)cout<<(a[i]^x)<<' ';
}

标签:该位,Educational,157,int,个数,Codeforces,异或,b1
From: https://www.cnblogs.com/ycllz/p/17823993.html

相关文章

  • Codeforces Round 908 (Div. 2)
    比赛链接A.SecretSport题解O(1*T)对于一场比赛,结束前谁最后赢就是谁赢#include<bits/stdc++.h>usingnamespacestd;strings;voidsolve(){intn;cin>>n>>s;cout<<s[n-1]<<endl;}intmain(){intT;cin>>T......
  • CodeForces 852C Property
    洛谷传送门CF传送门NOIP模拟赛T1,小清新几何题。要让选出的点组成的多边形面积最大,就要让正多边形的面积减去选出的点组成的多边形面积最小。而这个面积差可以表示成\(2n\)个三角形的面积,即\(\sum\limits_{i=0}^{2n-1}S_{\triangleA_iA_{(i+1)\bmodn}B_{(i+......
  • Educational Codeforces Round 126 (Rated for Div. 2)
    https://codeforces.com/contest/1661/B题数据很小,直接bfs预处理就行C题随便猜了一下,设mx=\(max\{a_i\}\)最后的值应该是mx,mx+1,mx+2,mx+3之类的吧D题刚开始从前面考虑,陷入僵局,一度非常的困,学习凯库勒睡了一会,就突然想到了,前面不行,就从后面考虑,可以发现,从后面考虑的话,就非常......
  • Codeforces Round 908 (Div. 2)
    A.SecretSport题意:A与B选手在下棋,规定下赢X把看作赢一局,一共赢Y把的那个是最后的赢家。思路:因为不知道x,y到底是多少,n的范围是到20,所以只需要枚举x即可,时间复杂度不高,注意的是,如果枚举结果是A赢,那么给定字符串的最后一个值一定是A,反之也是。#include<bits/stdc++.h>usingnam......
  • Codeforces Visit
    CodeforcesVisit记录一下自己大概vis了那几场??随机补题大法好!CF632Div.2飞速模拟出ABC。优势在我!CF1333D发现就是把字符串变成LLRR此类形状。所以开头必然是L啊,然后我们考虑先把L换到第一个。发现必然是LLLLLLLLLLLRRRRRRRR啊,很快啊,不会了。CF1333E你妈妈con......
  • Educational Codeforces Round 157 (Rated for Div. 2)
    A.TreasureChest题目大意:人在0处,宝藏在x,钥匙在y,人最多拿宝箱z秒,问你最快多久开宝箱?思路:如果说钥匙在宝箱的左边,那么人只需要往右走就是最佳答案,如果钥匙在宝箱的右边,那么人只需要拿的宝箱到最佳地点就行#include<bits/stdc++.h>usingnamespacestd;voidsolve(){ intx,y......
  • Educational Codeforces Round 157 (Rated for Div. 2)
    F.FancyArrays第一眼感觉是去容斥掉条件1,因为条件2其实挺紧的。不妨用\(f(l,r)\)表示\(a\)值域在\([l,r]\)的方案(满足条件2)。那么答案为\(f(0,+\infty)-f(0,x-1)-f(x+k,+\infty)\),因为如果选了\([0,x-1]\)的数,那么还要更大的话,一定会选到\([x,x+k-1]\),所以你要......
  • Codeforces Round 907 (Div. 2)
    ASortingwithTwos题目大意:选择一个m,然后将1~2^m下表的数减一,可以操作无限次,问你能不能使数组单调递增题目数据851234556534496557566874432162245328131719275717913531757179921012340678910YESYESYE......
  • Codeforces Round 905 (Div. 2) C. You Are So Beautiful
    题面翻译给定数列\(a\),定义一个子序列\(S\)是合法的当且仅当从\(a\)中有且仅有一种选法能选出子序列\(S\)(选法相同定义为最终选出的位置集合相同)。求其有多少非空合法子序列,满足它占据了\(a\)中一端连续的区间。\(n\leq10^5\)。思路判断区间合法性对于一段区间\([l......
  • Educational Codeforces Round 157 (Rated for Div. 2)
    A.TreasureChest分类讨论一下,只有两种情况。走到钥匙处,然后走到箱子处走到箱子处,移动箱子,走到钥匙处,走回箱子处对于第二种情况可以直接枚举箱子被移动到的位置#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongusingvi=vector<int>;usingpi......