社区讨论

《离谱》

P7076[CSP-S 2020] 动物园参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lq8tovra
此快照首次捕获于
2023/12/17 09:43
2 年前
此快照最后确认于
2023/12/17 11:28
2 年前
查看原帖
答案一长串
CPP
#include<iostream>
#include<cstdio>
#define ull unsigned long long
using namespace std;
const int N = 1000005;
int q[N], p[N], num[N];
bool vis[N];
ull t;
int main(){
	int n, m, c, k;
	scanf("%d%d%d%d", &n, &m, &c, &k);
	int cnt = 0;
	for(int i = 1; i <= n; i++){
		ull a;
		scanf("%llu", &a);
		t |= a;
	}
	for(int i = 1; i <= m; i++){
		scanf("%d%d", q+i, p+i);
		if((t >> p[i]) & 1)
			num[q[i]] = 1;
	}
	int ans = 0;
	for(int i = 1; i <= m; i++)
		if(!num[q[i]]){
			if(vis[p[i]])
				continue;
			ans++;
			vis[p[i]] = 1;
		}
	if(!n && !m && k-ans == 64){
		//超范围
		puts("18446744073709551616");
		return 0; 
	}
	ull sum = 1;
	for(int i = 1; i <= k-ans; i++)
		sum *= 2;
	printf("%ull", sum-n);
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...