为什么赋值的东西不一样一个会tle一个不会
  • 板块学术版
  • 楼主ZnPdCo
  • 当前回复3
  • 已保存回复4
  • 发布时间2024/1/13 14:36
  • 上次更新2024/1/13 17:08:14
查看原帖
为什么赋值的东西不一样一个会tle一个不会
560700
ZnPdCo楼主2024/1/13 14:36

首先,先不管代码的正确性,有以下代码(理应正确):

#include <cstdio>
#include <cstdlib>
#include <set>
#define N 3000
using namespace std;
int n, siz;
bool a[N][N], v[N][N];
int tot;
inline int calc(int x) {
	if(x < 0) return x + siz;
	else if(x >= siz) return x - siz;
	return x;
}
inline int read() {
	int x = 0;
	char c = '.';
	while(c < '0' || c > '9') c = getchar();
	while(c >= '0' && c <= '9') {
		x = (x << 1) + (x << 3) + (c ^ '0');
		c = getchar();
	}
	return x;
}
int main() {
//	freopen("set.in", "r", stdin);
//	freopen("set.out", "w", stdout);
	n = read();
	siz = 1<<n;
	for(int i = 0; i < siz; i++) {
		for(int j = 0; j < siz; j++) {
			a[i][j] = read();
		}
	}
	
	for(int w = siz/2; w >= 2; w /= 2) {
		for(int i = 0; i < siz; i++) {
			for(int j = 0; j < siz; j++) {
				v[i][j] = 0;
			}
		}
		for(int i = 0; i < siz; i++) {
			for(int j = 0; j < siz; j++) {
				if(a[i][j]) {
					v[i][j] ^= 1;
					v[calc(i+w/2)][j] ^= 1;
					v[calc(i-w/2)][j] ^= 1;
					v[i][calc(j+w/2)] ^= 1;
					v[i][calc(j-w/2)] ^= 1;
				}
			}
		}
		for(int i = 0; i < siz; i++) {
			for(int j = 0; j < siz; j++) {
				a[i][j] = v[i][j];
			}
		}
	}
	
	for(int i = 0; i < siz; i++) {
		for(int j = 0; j < siz; j++) {
			if(v[i][j]) {
				tot++;
			}
		}
	}
	printf("%d\n", tot);
	for(int i = 0; i < siz; i++) {
		for(int j = 0; j < siz; j++) {
			if(v[i][j]) {
				printf("%d %d\n", i, j);
			}
		}
	}
}

其中的:

for(int i = 0; i < siz; i++) {
	for(int j = 0; j < siz; j++) {
		if(a[i][j]) {
			v[i][j] ^= 1;
			v[calc(i+w/2)][j] ^= 1;
			v[calc(i-w/2)][j] ^= 1;
			v[i][calc(j+w/2)] ^= 1;
			v[i][calc(j-w/2)] ^= 1;
		}
	}
}

是导致tle的重要代码。

但是当我把它换成(当然,更换之后代码是不正确的,但是我们先不管正确性):

for(int i = 0; i < siz; i++) {
	for(int j = 0; j < siz; j++) {
		if(a[i][j]) {
			a[i][j] ^= 1;
			a[calc(i+w/2)][j] ^= 1;
			a[calc(i-w/2)][j] ^= 1;
			a[i][calc(j+w/2)] ^= 1;
			a[i][calc(j-w/2)] ^= 1;
		}
	}
}

就不会tle(500ms)

2024/1/13 14:36
加载中...