30求救 1,2,3点之后全部tle
查看原帖
30求救 1,2,3点之后全部tle
327069
Lqwq楼主2021/10/11 15:02
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <string>
using namespace std;

int n;
int c[20],p[20],l[20],cc[20],ll[20],map[2000005],maxnc,maxnl,ll1[20];
//  编号  洞数  活 
bool check(int m);

int main()
{
	
	scanf("%d",&n);
	
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d%d",&c[i],&p[i],&l[i]);
		cc[i]=c[i];
		ll[i]=l[i];
		ll1[i]=l[i];
		maxnc=max(maxnc,c[i]);//至少有多少个洞穴
	}
	
	if(n==1)
	{
		printf("1");
		return 0;
	}
	
	sort(ll1+1,ll1+1+n,greater<int>());
	maxnl=ll1[2];
	
	for(int i=maxnc;i;++i)
	{
		if(check(i)==true)
		{
			printf("%d\n",i);
			return 0;
		}
	}
	return 0;
}

bool check(int m)
{
	for(int j=1;j<=maxnl;++j)
	{
		memset(map,0,sizeof(map));
		for(int i=1;i<=n;++i)
		{
			if(map[(cc[i]+p[i])%m]==0&&ll[i]>0)
			{
				if((cc[i]+p[i])%m==0)
				{
					map[m]=1;
					cc[i]=m;
				}
				else
				{
					map[(cc[i]+p[i])%m]=1;
					cc[i]=(cc[i]+p[i])%m;
				}
				ll[i]--;
			}
			else if(map[(cc[i]+p[i])%m]!=0&&ll[i]!=0)
			{
				for(int k=1;k<=n;k++)
				{
					cc[k]=c[k];
					ll[k]=l[k];
				}				
				return false;
			}
			else if(map[(cc[i]+p[i])%m]==0&&ll[i]==0)
			continue;
		}
	}
	return true;
}
2021/10/11 15:02
加载中...