75求助
查看原帖
75求助
201219
coolbreeze楼主2021/10/6 11:33
#include <cstdio>
#include <cstdlib> 
using namespace std;
typedef unsigned long long ull;
ull ans = 1, cnttwo = 0;
ull Ba = 0 , Bc = 0;
ull n , m , c , k;
ull la[66] , lc[66];
void fread( ull &n ) {
	n = 0;
	char c = getchar();
	while( c < '0' || c > '9' ) 
		c = getchar();
	while( c >= '0' && c <= '9' ) {
		n = ( n << 1 ) + ( n << 3 ) + c - '0';
		c = getchar();
	}
	return ;
}
int main() {
	fread(n) , fread(m) , fread(c) , fread(k);
	for( int i = 1 ; i <= n ; i ++ ) {
		ull animal;
		fread(animal);
		Ba = Ba | animal;
	}
	for( int i = 1 ; i <= m ; i ++ ) {
		ull pi, qi ;
		fread(pi) , fread(qi);
		ull nowbit = 1 << pi ;
		if( nowbit | Ba > 0 )
			Bc = Bc | nowbit;
	}
	for(int i = 0 ; i < k ; i ++ ) {
		la[ i + 1 ] = Ba & 1;
		lc[ i + 1 ] = Bc & 1;
		if(Ba)
			Ba >>= 1;
		if(Bc)
			Bc >>= 1;
	}
	bool f = 1;
	for( int i = k ; i >= 1 ; i -- ) {
		if( ! ( la[i] == 0 && lc[i] == 1) ){
			ans *= 2;
			cnttwo ++;
		}
	}
	if( !ans && cnttwo == 64 && n == 0)
		printf("18446744073709551616");
	else
		printf( "%llu" , ans - n );
	return 0;
}

感觉思路没啥问题,还有啥要特判断的啊

2021/10/6 11:33
加载中...