首页 > 其他分享 >ATtokiomarine2020E O(rand) 题解

ATtokiomarine2020E O(rand) 题解

时间:2024-01-28 16:57:37浏览次数:31  
标签:rand typedef ch ATtokiomarine2020E int 题解 long getchar define

题目链接

点击打开链接

题目解法

首先,\(S\) 一定要是 \(T\) 的子集
先筛出符合条件的 \(a_i\),即满足 \(S\subseteq a_i\subseteq T\)
令 \(dif\) 为 \(T-S\),定义数 \(x\) 覆盖第 \(y\) 位为二进制下 \(x\) 的第 \(y\) 位为 \(1\)
现在的问题变成了找到大小 \(\le k\) 的 \(\{a_i\}\) 的子集,使得 \(dif\) 中的每一位都有数覆盖,但不能选出的所有数都覆盖
这显然要容斥,但我一直不会
下面的容斥感觉很妙
显然要枚举不合法的位置集合 \(S\),这些位置要么没数覆盖,要么所有数都覆盖
而合法的 \(\{a_i\}\) 的子集需要满足 \(x\&S\) 相同,这一步是较妙的
然后可以直接组合数统计了

时间复杂度 \(O(n2^{18})\)

#include <bits/stdc++.h>
#define F(i,x,y) for(int i=(x);i<=(y);i++)
#define DF(i,x,y) for(int i=(x);i>=(y);i--)
#define ms(x,y) memset(x,y,sizeof(x))
#define SZ(x) (int)x.size()-1
#define all(x) x.begin(),x.end()
#define pb push_back
using namespace std;
typedef long long LL;
typedef unsigned long long ull;
typedef pair<int,int> pii;
template<typename T> void chkmax(T &x,T y){ x=max(x,y);}
template<typename T> void chkmin(T &x,T y){ x=min(x,y);}
inline int read(){
    int FF=0,RR=1;
    char ch=getchar();
    for(;!isdigit(ch);ch=getchar()) if(ch=='-') RR=-1;
    for(;isdigit(ch);ch=getchar()) FF=(FF<<1)+(FF<<3)+ch-48;
    return FF*RR;
}
const int N=60;
int n,k,S,T,a[N],cnt[1<<18];
LL C[N][N],g[N];
int main(){
    n=read(),k=read(),S=read(),T=read();
    if((S&T)!=S){ puts("0");exit(0);}
    int t=0;
    F(i,1,n){ a[i]=read();if((a[i]&S)==S&&(a[i]|T)==T) a[++t]=a[i];}
    n=t;
    C[0][0]=1;
    F(i,1,n){
        C[i][0]=1;
        F(j,1,min(i,k)) C[i][j]=C[i-1][j-1]+C[i-1][j],g[i]+=C[i][j];
    }
    int dif=S^T;LL ans=0;
    for(;;dif=(dif-1)&(S^T)){
        F(i,1,n) cnt[a[i]&dif]++;
        LL coef=0;
        F(i,1,n) if(cnt[a[i]&dif]) coef+=g[cnt[a[i]&dif]],cnt[a[i]&dif]=0;
        if(__builtin_popcount(dif)&1) ans-=coef;
        else ans+=coef;
        if(!dif) break;
    }
    printf("%lld\n",ans);
    return 0;
}

标签:rand,typedef,ch,ATtokiomarine2020E,int,题解,long,getchar,define
From: https://www.cnblogs.com/Farmer-djx/p/17992996

相关文章

  • 洛谷题解-P2888 [USACO07NOV] Cow Hurdles S (Floyd)
    https://www.luogu.com.cn/problem/P2888题目描述FarmerJohnwantsthecowstoprepareforthecountyjumpingcompetition,soBessieandthegangarepracticingjumpingoverhurdles.Theyaregettingtired,though,sotheywanttobeabletouseaslittleene......
  • ABC338 F Negative Traveling Salesman 题解
    QuestionABC338FNegativeTravelingSalesman给出一个\(N\)个点\(M\)条边的有向图,边权可能为负数,但不可能有负环每经过一条边就要加上这条边的代价求,一条路径经过所有的点,并且要求总代价最小Solution观察到\(N\le20\)自然而然想到状压因为多次经过一条边的代价是......
  • CF1423G Growing flowers题解
    考虑每种颜色的贡献,用总数\(n-k+1\)减去没有贡献到的(极长连续段长度为\(len\)时),贡献为\(\max(len-k+1,0)\),所以考虑用\(\text{ODT}\)维护所有颜色的连续段。具体的,维护一个大的\(ODT\)存储所有连续段,再对每个颜色存储自己的连续段,用\(\text{BIT}\)维护每个长度的极长......
  • ABC338 D Island Tour 题解
    Question有\(n\)座海岛由\(n\)条桥连着,第\(i\)座桥连接第\(i\)和\(i+1\)座海岛,第\(n\)座桥连接第\(n\)和\(1\)座海盗有一条长度为\(m\)的旅游路线,第\(X_i\)表示依次到达的岛屿现在需要切断一条桥,求总旅游路线最小值Solution显然,从第\(X_{i-1}\)到\(X_......
  • ABC338 E Chords 题解
    Question一个圆上有\(2N\)个点均匀分布,给出\(N\)条线,每条线连接两个顶点问,有没有两条线相交Solution也算一个比较典的题目考虑到这种两两配对,配对中有没有交错关系的可以考虑异或哈希因为一个数异或两次等于它本身,所以我们可以用异或来实现一个“撤销”操作我们当我......
  • UVA10852 的题解
    UVA10852的题解题目大意给定自然数\(n(100\leqn\leq10000)\),寻找质数\(x\len\),使得\(p\timesx\leqn<(p+1)\timesx\)且\(n-p\timesx\)最大。思路不难发现,\(p\)其实就是$\left\lfloor\frac{n}{x}\right\rfloor$,所以,我们只要找到对应的\(x\),\(p\)的只就......
  • 洛谷题解-P3003 [USACO10DEC] Apple Delivery S (dijkstra)
    题目描述Bessiehastwocrispredapplestodelivertotwoofherfriendsintheherd.Ofcourse,shetravelstheC(1<=C<=200,000)cowpathswhicharearrangedastheusualgraphwhichconnectsP(1<=P<=100,000)pasturesconvenientlynumb......
  • CF765F Souvenirs 题解
    题目链接:CF或者洛谷想了很久,然后想起做过的一道题:秃子酋长,一开始以为差不多,结果写着写着就发现不对劲了。最后写出了个神仙回滚莫队解法,感觉很妙,记录下。进入神仙分析时刻首先,我们来考虑一个事实,加上一个数以后,如果能找到它的前后驱,那么可以立马更新最优解,这个也即是瓶颈点。......
  • ABC338 题解(A-E)
    前言:F,G后续补充。A题意判断一个字符串,是否满足只有第一位为大写字母,其余为小写字母。Sol字面意思模拟即可。Code#include<bits/stdc++.h>#definelllonglong#defineN200005#defineendl"\n"#definefifirst#definesesecondusingnamespacestd;constll......
  • AndroidStudio 编辑xml布局文件卡死问题解决
    之前项目编写的都是正常,升级AndroidStudio后编辑布局文件就卡死,还以为是AndroidStudio文件。其实不然,我给整个项目增加了版权声明。所以全部跟新后,布局文件也增加了版权声明。估计AndroidStudio在解析布局文件时候因为有版权声明的原因导致卡死,所以删除版权声明就可以了。可以......