[CF991A]If at first you don‘t succeed...题解

CF991A [If at first you don't succeed...]

  • 容斥问题
    • 公式
    • 细节:

容斥问题

公式

  • N-(A+B-C)
  • 不懂的见容斥原理

细节:

答案要大于0
A不能大于等于N
B不能大于等于N
C不能大于等于N
通过人数大于等于A 
通过人数大于等于B 
通过人数大于等于C
C不能大于A 
C不能大于B
答案小于N

中和一下:

!(x>=n||y>=n||z>=n||z>x||z>y||sum<=0||n-sum<x||n-sum<y||n-sum<z||sum>n)

标程:

#include
using namespace std;
int x,y,z,n;
inline void read(register int &x){
	x=0;register char c=getchar();register bool f=0;
	while(c<'0'||c>'9'){if(c=='-')f=1;c=getchar();}
	while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+(c^48),c=getchar();
	if(f)x=-x;
}
int main(){
	read(x),read(y);
	read(z),read(n);
	int ans=q-n-m+x;
	printf("%d\n",(x>=n||y>=n||z>=n||z>x||z>y||sum<=0||n-sum<x||n-sum<y||n-sum<z||sum>n)?-1:ans);
	return 0;
}

你可能感兴趣的:(题解,c++)