10.2晚

 

 1 #include
 2 using namespace std;
 3 inline int read(){
 4     register int x=0,f=1;char ch=getchar();
 5     while(!isdigit(ch)) f=ch=='-'?-1:1,ch=getchar();
 6     while(isdigit(ch)) x=(x<<1)+(x<<3)+ch-48,ch=getchar();
 7     return x*f;
 8 }
 9 
10 void work(){
11     int a=read(),b=read(),c=read(),x=read(),y=read(),z=read(),cha=0;
12     if(a>x) cha=cha+(a-x)/2;
13     else cha=cha+a-x;
14     if(b>y) cha=cha+(b-y)/2;
15     else cha=cha+b-y;
16     if(c>z) cha=cha+(c-z)/2;
17     else cha=cha+c-z;
18     puts(cha<0?"NO":"YES");
19 }
20 int main(){
21     int T=read();
22     while(T--) work();
23 }
T1
 1 #include
 2 #define mod 1000000007LL
 3 #define int long long
 4 #define N 18
 5 #define M 1<<18
 6 using namespace std;
 7 inline int read(){
 8     register int x=0,f=1;char ch=getchar();
 9     while(!isdigit(ch)) f=ch=='-'?-1:1,ch=getchar();
10     while(isdigit(ch)) x=(x<<1)+(x<<3)+ch-48,ch=getchar();
11     return x*f;
12 }
13 
14 int n,m,U;
15 int f[M],bit[4500],rev[M],cnt[M],to[N];
16 signed main(){
17     n=read(),m=read();U=(1<1;
18     for(int i=1;i<=m;++i){
19         int u=read(),v=read();
20         to[u]|=(1<1);
21     }
22     for(int i=0;i<=U;++i){
23         int num=0;
24         for(int j=i;j;j-=j&-j) num++;
25         cnt[i]=num;
26     }
27     bit[0]=1;rev[1]=0;
28     for(int i=1;i<=n;++i) bit[i]=(bit[i-1]<<1)%mod,rev[bit[i]]=i;
29     for(int i=n+1;i<=4000;++i) bit[i]=(bit[i-1]<<1LL)%mod;
30     f[0]=1;
31     for(int i=0;i<=U;++i){
32         int opp=U^i;
33         for(int j=opp;j;j=(j-1)&opp){
34             int num=0;
35             for(int k=i;k;k-=k&-k)
36                 num+=cnt[to[rev[k&-k]+1]&j];
37             f[i|j]=(f[i|j]+((cnt[j]+1)%2!=0?-1LL:1LL)*bit[num]*f[i])%mod;
38         }
39     }
40     printf("%lld\n",f[U]);
41     return 0;
42 }
T2

 

A. 天空龙


 普及组。

 

B. 巨神兵


省选难度?

关键在于题解中容斥的作用。

容斥的实际上是相同集合最后一次加入的集合是哪个。

$\sum_{i=1}^{n} C_{n}^{i}*-1^{i+1} =1$

以后来补qaq。

 

C. 太阳神


 

很帅的做法是利用miu函数做。

但以后来补$LaTex$qaq。

 

你可能感兴趣的:(10.2晚)