首页 > 其他分享 >Codeforces Good Bye 2022 CF 1770 F Koxia and Sequence 题解

Codeforces Good Bye 2022 CF 1770 F Koxia and Sequence 题解

时间:2023-01-02 22:02:40浏览次数:64  
标签:sub Good 1770 题解 sum 个数 序列 mod 位为

题目链接

注意题目要求的是所有好序列的所有元素的XOR之和的XOR之和。我一开始以为是所有XOR之和的加法和导致不知道官方题解在讲什么。

假设我们枚举一个位置\(1\le i\le n\)和一个数值\(v\),统计第i个位置为v的好序列的个数,如果个数为奇数就可以把最终答案异或上v。由于对于同一个v和不同的i,这个个数都相同,所以n为偶数的时候最终答案是0。要先把这个特判掉,不然影响后面思考。n为奇数的情况,其实我们就只要枚举所有v,求出\(a_1=v\)的好序列的个数,如果是奇数就把答案异或上v就行了。把数值的每一位拆开进一步转化成这样:枚举一个bit i(\(0\le i\le19\)),求出\(a_1\)的二进制第i位为1的好序列的个数,如果个数是奇数则最终答案的第i位为1。观察可以发现这个问题形式与之前的那个等价。

我们先枚举i。一个好的序列要满足所有元素的或=y,要求刚好=y是很难计算的,不如用容斥:定义\(f_s\)表示所有元素的或是s的子集(可以=s),且和为x,同时满足\(a_1\)的第i位为1的好序列个数。那么或刚好=y的好序列数量=\(\sum_{s\subseteq y}f_s(-1)^{|s\ xor\ y|}\)。令\(g_s=f_s\ mod \ 2\),那么或刚好=y的好序列数量奇偶性=\(\bigoplus_{s\subseteq y}g_s\),其中\(\bigoplus\)表示异或和。

当确定了i和s时,\(g_s\)其实是好算的。先看不要求\(a_1\)的第i位为1的情况,\(g_s=(\sum_{t_1,t_2\cdots t_n,\sum_t=x} \prod_{i=1}^n [t_i\&s=t_i])mod\ 2\)。有一个关于组合数的结论,\([m\&n=m]=\binom nm \ mod\ 2\),也就是\(\binom nm\)为奇数的充要条件是\(m\)为\(n\)的子集。所以\(g_s=(\sum_{t_1,t_2\cdots t_n,\sum_t=x} \prod_{i=1}^n \binom{s}{t_i}\ mod\ 2)mod\ 2=\binom{ns}{x}\ mod\ 2\)。加上要求\(a_1\)的第i位为1的条件,其实也只要改成要求\(s\)的第i位为1,然后\(g_s=\binom{ns-2^i}{x-2^i}\ mod\ 2\)就行了。

枚举所有i和s然后算出所有\(g_s\)就能求出最终答案了。总时间复杂度\(O(ylogy)\)。

点击查看代码
#include <bits/stdc++.h>

#define rep(i,n) for(int i=0;i<n;++i)
#define repn(i,n) for(int i=1;i<=n;++i)
#define LL long long
#define pii pair <int,int>
#define fi first
#define se second
#define mpr make_pair
#define pb push_back

void fileio()
{
  #ifdef LGS
  freopen("in.txt","r",stdin);
  freopen("out.txt","w",stdout);
  #endif
}
void termin()
{
  #ifdef LGS
  std::cout<<"\n\nEXECUTION TERMINATED";
  #endif
  exit(0);
}

using namespace std;

LL n,x,y;

int main()
{
  fileio();

  cin>>n>>x>>y;
  if(n%2==0){puts("0");return 0;}
  LL ans=0;
  rep(i,20)
  {
    LL res=0;
    for(LL sub=y;sub>0;sub=(sub-1)&y) if(sub&(1<<i))
    {
      LL up=n*sub-(1LL<<i),dn=x-(1LL<<i);
      if(up<0||dn<0) continue;
      if((up&dn)==dn) res^=1;
    }
    if(res) ans|=(1<<i);
  }
  cout<<ans<<endl;

  termin();
}

标签:sub,Good,1770,题解,sum,个数,序列,mod,位为
From: https://www.cnblogs.com/legendstane/p/codeforces-good-bye-2022-1770-f-Koxia-and-Sequence-s

相关文章

  • angularJS友好URL实现 good
    nginx部署angularjs时的rewrite问题使用h5+angularjs完成了一个项目此项目在正式环境上使用nginx做webserver此项目的入口在微信/微博分享中由于分享时的项目访问地址中......
  • curl命令常见用法汇总 good
     ​​curl​​是一种命令行工具,作用是发出网络请求,然后得到和提取数据,显示在"标准输出"(stdout)上面。curl是一个强大的命令行工具,它可以通过网络将信息传递给服务器或者从服......
  • [NOI2018] 归程 题解
    题目描述[NOI2018]归程思路题目说,所有海拔\(\leqp\)的边都会有积水,因此所有的边分为了两个集合\(S_车,S_步\),其中\(S_车\)所有的边的海拔都\(>p\),\(S_步\)反......
  • Java中动态代理技术生成的类与原始类的区别 (good)
    用动态代理的时候,对它新生成的类长什么样子感到好奇.有幸通过一些资料消除了心里的疑惑.平时工作使用的Spring框架里面有一个AOP(面向切面)的机制,只知道它是把类......
  • Codeforces Round 789 div2 A-E题解 & 处理手法思考
    A.TokitsukazeandAllZeroSequence这题给一个数列,每次操作对于两个不相同的数字可以吧大的变成min,两个相同的话一个变为0问最少操作多少次能将整个数组变为0首......
  • AGC059 题解 (不含 F)
    去年的比赛拖到今年发了呢...AtcoderProvingContestA.MyLastABCProblem(2000)场上打表找规律找了半天考虑如何处理单个询问。显然连续相同字母可以缩起来(即不......
  • C. Koxia and Number Theory (线性同余)https://codeforces.com/contest/1770/problem/C
    https://codeforces.com/contest/1770/attachments/download/18470/editorial.pdf这个pdf都写得很明白了,这个c题终于懂了,麻了à$a_i^j\leqb^j$本来只需要枚举n/2之内的......
  • SDK更新不了问题解决
    问题阐述相信大家在更新SDK的时候都会遇到更新不了的问题,而且打不开Google搜索,这是因为天朝墙了Google,所以要么只能通过科学上网或者改HOSTS才能访问,更新SDK!本节来介绍两种......
  • CF319D 题解
    题意传送门给你一个字符串\(S\),要求你每次找到一个最短的并且最左边的形如\(XX\)(即由两个相同的字符串拼接而成)的子串,然后把这个字符串从\(XX\)变成\(X\)。问无法操......
  • Good Bye 2021: 2022 is NEAR D
    D.KeeptheAverageHigh题链又是任何一个任意正整数z,2x+3y=z有整数解。namo对于一个区间和为负数这个区间肯定可以又一些个长度为2长度为3的小区间构成要是我们......