这有任何道理吗
查看原帖
这有任何道理吗
741244
Eason_cyx大愚若智楼主2025/7/27 09:44
#include <bits/stdc++.h>
using namespace std;
int a[25][25], b[25];
struct node {
	int id, p;
	bool operator < (const node& y) const {
		return (p != y.p ? p < y.p : id < y.id);
	}
} xx[2000005];
int main() { 
	int n, m; cin >> n >> m;
	if(n == 1) { cout << "0\n"; return 0; }
	for(int i = 1;i < (1 << m);i++)
		xx[i] = {i, __builtin_popcount(i)};
	sort(xx+1, xx+(1 << m));
	for(int i = 1;i <= n;i++)
		for(int j = 1;j <= m;j++)
			cin >> a[i][j];
	for(int i = 1;i <= n;i++) {
		int ans = 0x7fffffff;
		for(int j = 1;j < (1 << m);j++) {
			int x = xx[j].id;
			for(int k = 1;k <= m;k++) b[k] = x % 2, x >>= 1;
			bool flag = false;
			for(int k = 1;k <= n;k++) {
				if(k == i) continue;
				bool ff = true;
				for(int l = 1;l <= m;l++)
					if(b[l] && (a[k][l] != a[i][l]))
						ff = false;
				if(ff) flag = true;
			} if(!flag) { ans = xx[j].p; break; }
		} cout << (ans == 0x7fffffff ? -1 : ans) << " \n"[i == n];
	}
	return 0;
}

就加了高亮处的优化就过了,还跑得飞快。不加 TLE 30。

2025/7/27 09:44
加载中...