这个代码的时间复杂度能优化到多少
  • 板块学术版
  • 楼主cancan123456
  • 当前回复11
  • 已保存回复11
  • 发布时间2023/9/2 17:14
  • 上次更新2023/11/2 23:51:18
查看原帖
这个代码的时间复杂度能优化到多少
448887
cancan123456楼主2023/9/2 17:14
#include <cstdio>
#include <bitset>
using namespace std;
const int n = 20;
bitset < n > bit[n][n], invbit[n][n];
int id[n][n], idx[n * n], idy[n * n];
int main() {
	for (int i = 0; i < n; i++) {
		bit[0][i][i] = 1;
	}
	for (int i = 1; i < n; i++) {
		for (int j = 0; j < n - i; j++) {
			bit[i][j] = bit[i - 1][j] ^ bit[i - 1][j + 1];
		}
	}
	int cnt = 0;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n - i; j++) {
			invbit[i][j] = ~bit[i][j];
			id[i][j] = cnt;
			idx[cnt] = i;
			idy[cnt] = j;
			cnt++;
		}
	}
	long long ans = 0;
	for (int p1 = 0; p1 < cnt; p1++) {
		for (int p2 = p1 + 1; p2 < cnt; p2++) {
			for (int p3 = p2 + 1; p3 < cnt; p3++) {
				for (int p4 = p3 + 1; p4 < cnt; p4++) {
					bitset < n > & bp1 = bit[idx[p1]][idy[p1]];
					bitset < n > & bp2 = bit[idx[p2]][idy[p2]];
					bitset < n > & bp3 = bit[idx[p3]][idy[p3]];
					bitset < n > & bp4 = bit[idx[p4]][idy[p4]];
					bitset < n > & ibp1 = invbit[idx[p1]][idy[p1]];
					bitset < n > & ibp2 = invbit[idx[p2]][idy[p2]];
					bitset < n > & ibp3 = invbit[idx[p3]][idy[p3]];
					bitset < n > & ibp4 = invbit[idx[p4]][idy[p4]];
					if ((bp1 & bp2 & bp3 & ibp4).count() != 0) {
						continue;
					}
					if ((bp1 & bp2 & ibp3 & bp4).count() != 0) {
						continue;
					}
					if ((bp1 & ibp2 & bp3 & bp4).count() != 0) {
						continue;
					}
					if ((ibp1 & bp2 & bp3 & bp4).count() != 0) {
						continue;
					}
					if ((ibp1 & ibp2 & ibp3 & bp4).count() != 0) {
						continue;
					}
					if ((ibp1 & ibp2 & bp3 & ibp4).count() != 0) {
						continue;
					}
					if ((ibp1 & bp2 & ibp3 & ibp4).count() != 0) {
						continue;
					}
					if ((bp1 & ibp2 & ibp3 & ibp4).count() != 0) {
						continue;
					}
					ans++;
				}
			}
		}
	}
	printf("%lld", ans);
	return 0;
}
2023/9/2 17:14
加载中...