[賽記] 暑假集訓CSP提高模擬27

Peppa_Even_Pig發表於2024-08-23

最後一場了,還是寫寫吧;

線性只因 40pts

賽時把與看成或了,最後才發現,結果我的神奇程式碼交上去得了40pts。。。

從高位到低位依次考慮,若這一位是1的數大於m則統計並刪除其它的數;

否則直接跳過;

點選檢視程式碼
#include <iostream>
#include <cstdio>
using namespace std;
int n, m;
int a[5000005];
int ans;
bool vis[5000005];
int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> m;
	int c = 0, o = 0;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	for (int i = 30; i >= 0; i--) {
		int sum = 0;
		for (int j = 1; j <= n; j++) {
			if (a[j] & (1 << i) && !vis[j]) sum++;
		}
		if (sum >= m) {
			ans += (1 << i);
			for (int j = 1; j <= n; j++) {
				if (!(a[j] & (1 << i))) vis[j] = true;
			}
		}
	}
	cout << ans;
	return 0;
}

相關文章