TLE 求优化
查看原帖
TLE 求优化
735797
XingnoYi楼主2025/7/26 18:01
#include <iostream>
#include <vector>
#include <cstring>
#define big long long
using namespace std;
big n,m,a[23][23],ans[23];
bool check(big p,bool f[])
{
	for(big i = 1;i <= n;i++)
	{
		if(i == p) continue;
		if(!f[i]) return 0;
	}
	return 1;
}
big count(big st)
{
	big rt = 0;
	for(big k = 0;k < m;k++)
	{
		rt += (st>>k)&1;
	}
	return rt;
}
int main()
{
	scanf("%lld %lld",&n,&m);
	for(big i = 1;i <= n;i++)
	{
		for(big j = 1;j <= m;j++)
		{
			scanf("%lld",&a[i][j]);
		}
	}
	for(big i = 1;i <= n;i++) // 枚举到第 i 个人
	{
		ans[i] = 1e18;
		for(big st = 1;st < (1ll<<m);st++)
		{
			bool f[23] = {};
			for(big k = 0;k < m;k++)
			{
				if(!((st>>k)&1)) continue;
				for(big j = 1;j <= n;j++)
				{
					if(j == i) continue;
					if(a[i][k+1] != a[j][k+1])
					{
						f[j] = 1;
					}
				}
			}
			if(check(i,f))
			{
				ans[i] = min(ans[i],count(st));
			}
		}
	}
	for(big i = 1;i <= n;i++)
	{
		printf("%lld ",ans[i]==1e18?-1:ans[i]);
	}
	return 0;
}
2025/7/26 18:01
加载中...