P7076 [CSP-S2020] 動物園
阿新 • • 發佈:2021-08-12
考慮什麼時候不滿足條件。
明顯當選到了需要使用沒有買的飼料時,會引起。
於是只要統計買了的飼料、沒用到的位的總和\(cnt\),這些位珂以隨便分配,因為他們怎麼取都會滿足條件;其餘位必須取\(0\)。
根據乘法原理,個數為\(2^{cnt}\)。再減去已經有的動物個數即可。注意開\(ull\)。
YJX AK IOI#include<bits/stdc++.h> using namespace std; #define int unsigned long long int n,m,c,k; unsigned long long mk=0; int p[1000005]; bool unused[74]; signed main(){ //freopen("zoo3.in","r",stdin); memset(unused,0,sizeof(unused)); cin>>n>>m>>c>>k; for(int i=1;i<=n;i++){ int x; cin>>x; mk|=x; } for(int i=1;i<=m;i++){ int x; cin>>p[i]>>x; } for(int i=1;i<=m;i++){ //cout<<(1<<p[i])<<endl; if(!(mk&(1ull<<p[i])))unused[p[i]]=1; } int cnt=0; for(int i=0;i<k;i++)if(unused[i])cnt++; int cnt2=k-cnt; if(cnt2==64&&!n)puts("18446744073709551616"); else{unsigned long long iee=(1ull/*重要*/<<cnt2); cout<<iee-n<<endl;} return 0; }