题意:
题意是真的难懂,求题目集(0~1<<m)中满足>=k对不同的试卷,两张试卷不同当且仅当至少存在一位不同,而且该位在题目集里。 n<=2e5 m<=20
思路:
我们可以把a和b当做0和1处理,我们可以先求出ixorj=ki ~xor~ j~=ki xor j =k的对数,为什么处理呢?因为对于任意某个位置为1的话那么就说明这两个试卷是不同的。怎么处理呢?可以fwt,a自己卷自己,先把a[0]减去n,然后记得a每个数/2,因为我们讨论的是i<j的情况,处理完以后,由于这个m比较小,我们可以二进制枚举每一种题目集的情况,假设赛制为x,那么显然我们要求的是假设t的当前枚举的数(∑tandi!=0andi!=0a[i])>=k假设t的当前枚举的数(\sum_{t~and~i~!=0 ~and~i~!= 0}a[i])~>=k假设t的当前枚举的数(∑t and i !=0 and i !=0​a[i]) >=k,一开始我一看诶这不是i是t的子集就可以了吗,然后t除外的位置都没考虑,后来仔细想想发现这是错误的,那么我们想想能不能容斥,全集是n*(n-1)/2减去的就是k&t==0的点,那么我们需要保证k对于t的所有位置都要为0,别的位置可以任意取,那么显然可以nlogn sosdp,代表子集和,cnt-=(全集^t),然后判断cnt是否大于等于k就行了。

// Problem: M. United in Stormwind
// Contest: Codeforces - The 2020 ICPC Asia Shenyang Regional Programming Contest
// URL: https://codeforces.com/gym/103202/problem/M
// Memory Limit: 1024 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org)//#pragma GCC target("avx")
//#pragma GCC optimize(2)
//#pragma GCC optimize(3)
//#pragma GCC optimize("Ofast")
// created by myq
#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long ll;
#define x first
#define y second
typedef pair<int,int> pii;
const int N = 4000010;
const int mod=998244353;
inline int read()
{int res=0;int f=1;char c=getchar();while(c>'9' ||c<'0'){if(c=='-')    f=-1;c=getchar();}while(c>='0'&&c<='9'){res=(res<<3)+(res<<1)+c-'0';c=getchar(); }return res;} ll a[N];
ll b[N];
ll dp[N];
int m;
void XOR(ll *a,int opt,int N)
{for(int i=1;i<N;i<<=1)for(int p=i<<1,j=0;j<N;j+=p)for(int k=0;k<i;++k){ll X=a[j+k],Y=a[i+j+k];a[j+k]=(X+Y);a[i+j+k]=(X-Y);if(opt==-1)a[j+k]=1ll*a[j+k]/2,a[i+j+k]=1ll*a[i+j+k]/2;}
}
int main()
{ int n;ll k;cin>>n>>m>>k;for(int i=1;i<=n;i++){string s;cin>>s;int cnt=0;for(int j=0;j<s.size();j++)if(s[j]=='A')cnt=cnt*2;elsecnt=cnt*2+1;// cout<<cnt<<endl;a[cnt]++;}XOR(a,1,1<<m);for(int i=0;i<1<<m;i++){a[i]=a[i]*a[i];}XOR(a,-1,1<<m);for(int i=0;i<1<<m;i++){if(i==0)a[i]-=n;a[i]/=2;}memcpy(dp,a,sizeof a);for(int i=0;i<m;i++){for(int j=(1<<m)-1;j>=0;j--){if(j>>i&1){dp[j]+=dp[j^(1<<i)];}}}int res=0;for(int i=0;i<1<<m;i++){ll cnt=1ll*n*(n-1)/2;cnt-=dp[((1<<m)-1)^i];// cout<<cnt<<endl;   if(cnt>=k)res++;}cout<<res;return 0;}
/**
* In every life we have some trouble
* When you worry you make it double
* Don't worry,be happy.
**/

ICPC 沈阳M - United in Stormwind SOSDP+FWT+容斥相关推荐

  1. ACM-ICPC 2018 沈阳赛区网络预赛 Spare Tire(容斥+公式推)

    A sequence of integer \lbrace a_n \rbrace{an​} can be expressed as: \displaystyle a_n = \left\{ \beg ...

  2. 2020ICPC沈阳 - United in Stormwind(推公式+FWT+SOSdp)

    题目链接:点击查看 题目大意:规定一张试卷上有 mmm 个问题,每个问题只有 A,BA,BA,B 两个选项,现在给出 nnn 张试卷.需要选择一个问题的子集,使得有大于等于 kkk 对试卷的答案是不完 ...

  3. 2020 区域赛(沈阳) M. United in Stormwind fwt + sosdp

    传送门 文章目录 题意: 思路: 题意: 有nnn个试卷,每个试卷有mmm个问题,每个问题有两个选项a,ba,ba,b,定义两个试卷不同当且仅当其选中的问题中有一个问题不同.现在问你对于mmm个问题的 ...

  4. 2018 ICPC 沈阳站

    细胞色素训练3 排名:100/193 2018年ICPC沈阳站,学长在这里拿金了.听学长说开始时候很快的出了两题,排名第四,是可以进final的,然后一直没过题,直到最后封榜时候连过两题,金牌最后一名 ...

  5. 2020 icpc 沈阳

    ​ Journey to Un'Goro 思维+dfs 大意:有个只包含'r,b'的长度为 n 的字符串,对于区间 [l,r] 若区间内 'r' 的个数是奇数,那么称这个区间为好的区间,现在需要构造字 ...

  6. cf103202M. United in Stormwind

    题目描述 题解 假设选出题目的集合为 SSS ,考虑求出它的数对数. (i,j)(i,j)(i,j) 如果不相同,则 aixoraj&S=0a_i \text{xor} a_j \& ...

  7. 2021 ICPC 沈阳赛区J题 Luggage Lock

    2021 ICPC 沈阳赛区J题 Luggage Lock 题意 有TTT组样例,其中每组样例为: 给定一个密码为b0b1b2b3b_0b_1b_2b_3b0​b1​b2​b3​的密码锁,已知当前密码 ...

  8. 21年icpc沈阳站记录

    icpc沈阳站记录 2021.11.22凌晨 从昨晚紧张到辗转反侧,虽然早就做好了打铁的心理准备,但待到比赛最后一刻两道铜牌题还没出时,满脑子的不甘心.当然最后肯定铁了395/576. 11.21也就 ...

  9. 第46届icpc 沈阳 J-Luggage Lock(思维 + 爆搜 / 队友玄学出法, 还没看懂)

    第46届icpc 沈阳 J-Luggage Lock(思维 + 爆搜 / 队友玄学出法, 还没看懂) 题目来源:第46届icpc 沈阳 J-Luggage Lock 题意: 给出两个四位数的密码锁a和 ...

最新文章

  1. 在java中使用redis
  2. 发送邮件代码--ASP.NET中常用代码之一
  3. GDCM:VRDS的测试程序
  4. php 正则替换url参数,JavaScript正则获取地址栏中参数的方法分享
  5. 中国电信:5G 手机可实现不换卡号;新西兰否认禁用华为;Visual Studio 2019 正式发布!| 极客头条...
  6. 64位ODBC数据源配置
  7. 打造属于自己的量化投资系统3——利用backtrader创建加权移动平均线策略
  8. 基于单片机的交通灯控制系统设计
  9. 加州ucla 计算机学校,UCLA的Electrical Engineering「加州大学洛杉矶分校电气工程系」...
  10. Zabbix安装配置详解
  11. C语言——文件操作(读取文件保存到结构体)
  12. 微信推广二维码接口使用总结
  13. 远程副本没有恢复到足以启用数据库镜像或将其联接到可用性组的程度。
  14. Tensorflow-Keras教程
  15. Java基础语法知识你真的都会吗?
  16. 聊聊Dubbox(一):为何选择
  17. 小岳岳吐槽房子隔音差:买房小心隔墙有耳
  18. antd vue表单验证_ant design vue框架中自定义表单或单个表单框验证
  19. 基于howler.js开发的音乐播放器
  20. 拆解KinectFusion算法之TSDF

热门文章

  1. Java的集合有什么?
  2. linux 命令连接符,Linux 中命令链接操作符的十个最佳实例
  3. 【MFC学习笔记】常见问题解答
  4. 小观插值逼近的龙格现象
  5. TCP/IP五层协议体系结构的各层功能
  6. ANSYS workbench的模态分析基本原理和步骤
  7. 怎么让限制复制的网站能复制
  8. 2020小迪培训(第21天 WEB 漏洞-文件上传之后端黑白名单绕过)
  9. HDU 6617 Enveloping Convex(凸包+半平面交+二分)
  10. 【用CSS让单行文本溢出显示省略号】