QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#167011#4283. Power of XORjeffqiCompile Error//C++143.0kb2023-09-06 22:41:452023-09-06 22:41:47

Judging History

你现在查看的是最新测评结果

  • [2023-09-06 22:41:47]
  • 评测
  • [2023-09-06 22:41:45]
  • 提交

answer

#include<bits/stdc++.h>
#define ll long long
#define vi vector<int>
#define vll vector<ll>
#define eb emplace_back
#define pb push_back
#define all(v) v.begin(),v.end()
#define rall(v) v.rbegin(),v.rend()
#define sz(v) ((int)v.size())
#define pii pair<int,int>
#define pll pair<ll,ll>
#define fi first
#define se second
#define umap unordered_map
#define uset unordered_set
#define mset multiset
#define ull unsigned ll
#define i128 __int128
using namespace std;

namespace qiqi {
	const int P = 1e9+7;
	ll pow(ll b,ll k) {
		ll a = 1;
		for (; k; b = b*b%P,k >>= 1) {
			if (k&1) {
				a = a*b%P;
			}
		}
		return a;
	}
	struct LB {
		int n,r; vll a;
		LB(int n):n(n),r(),a(n) {}
		void ins(ll x) {
			while (x) {
				int p = __lg(x);
				if (a[p] == 0) {
					for (int i = 0; i < p; i++) {
						if (a[i] && ((x>>i)&1)) {
							x ^= a[i];
						}
					}
					r++; a[p] = x;
					for (int i = n-1; i > p; i--) {
						if ((a[i]>>p)&1) {
							a[i] ^= x;
						}
					}
					return;
				}
				x ^= a[p];
			}
		}
		LB OC() {
			LB res(n);
			for (int i = n-1; i >= 0; i--) {
				if (!a[i]) {
					ll x = 1ll<<i;
					for (int j = n-1; j > i; j--) {
						if ((a[j]>>i)&1) {
							x ^= 1ll<<j;
						}
					}
					res.ins(x);
				}
			}
			return res;
		}
		vll getall() {
			vll vec;
			for (int i = 0; i < n; i++) {
				if (a[i]) {
					vec.eb(a[i]);
				}
			}
			const int m = sz(vec);
			vll res(1<<m);
			for (int i = 1; i < (1<<m); i++) {
				int p = __lg(i);
				res[i] = res[i^(1<<p)]^vec[p];
			}
			return res;
		}
	};
	void main() {
		int n,m;
		cin >> n >> m;
		vll a(n);
		for (int i = 0; i < n; i++) {
			cin >> a[i];
		}
		const ll mx = *max_element(all(a));
		if (mx == 0) {
			cout << 0 << '\n';
			return;
		}
		const ll lg = __lg(mx),num = lg+1;
		LB lb(num);
		for (int i = 0; i < n; i++) {
			lb.ins(a[i]);
		}
		vll p(num+1);
		if (lb.r*2 <= num) {
			vll vec = lb.getall();
			for (auto x:vec) {
				p[__builtin_popcountll(x)]++;
			}
		}
		else {
			auto rlb = lb.oc();
			vll c(num+1),vec = rlb.getall();
			for (auto x:vec) {
				c[__builtin_popcountll(x)]++;
			}
			for (int i = 0; i <= num; i++) {
				vll f(num+1); f[0] = 1;
				c[i] = c[i]*pow(2,P-1-rlb.r)%P;
				for (int j = 1; j <= i; j++) {
					for (int k = num; k > 0; k--) {
						f[k] = (f[k]-f[k-1])%P;
					}
				}
				for (int j = 1; j <= num-i; j++) {
					for (int k = num; k > 0; k--) {
						f[k] = (f[k]+f[k-1])%P;
					}
				}
				for (int j = 0; j <= num; j++) {
					p[j] = (p[j]+c[i]*f[j])%P;
				}
			}
		}
		ll ans = 0;
		for (int i = 0; i <= num; i++) {
			ans = (ans+p[i]*pow(i,m))%P;
		}
		cout << (ans*pow(2,n-lb.r)%P+P)%P << '\n';
	}
}

int main() {
//	clock_t st = clock();
//	freopen("test.in","r",stdin);
//	freopen("test.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int T = 1;
//	cin >> T;
	while (T--) {
		qiqi::main();
	}

//	cout << (double)(clock()-st)/CLOCKS_PER_SEC << '\n';
	return 0;
}

Details

answer.code: In function ‘void qiqi::main()’:
answer.code:111:39: error: ‘struct qiqi::LB’ has no member named ‘oc’; did you mean ‘OC’?
  111 |                         auto rlb = lb.oc();
      |                                       ^~
      |                                       OC