70分MLE代码一改就成了40分求助
查看原帖
70分MLE代码一改就成了40分求助
118747
Misaka屮Mikoto楼主2021/5/2 15:15

为什么40分wa啊,那位大佬帮帮我qwq

#include<stdio.h>
int bo[100005];
int num[300005];
struct nu
{
	int t;
	int n;
	int l,r;
}pe[300040];
int bef;
int nn;
int cnt;
int now;
int main()
{
	scanf("%d",&nn);
	for(int i=1;i<=nn;i++)
	{
		scanf("%d",&pe[i].t);
		scanf("%d",&pe[i].n);
		pe[i].l=now;
		now+=pe[i].n;
		pe[i].r=now-1;
		for(int j=pe[i].l;j<=pe[i].r;)
		{
			scanf("%d",&num[j]);
			if(bo[num[j]]==0)cnt++;
			bo[num[j]]++;
			j++;
		}
		while(pe[i].t-pe[bef].t>=86400)
		{
			for(int j=pe[bef].l;j<=pe[bef].r;)
			{
				if(bo[num[j]]==1)cnt--;
				bo[num[j]]--;
				j++;
			}
			bef++;
		}
		printf("%d\n",cnt);
	}
}

原70分MLE代码

#include<stdio.h>
int bo[100005];
struct nu
{
	int t;
	int n;
	int k[30005];
}pe[10004];
int bef;
int nn;
int cnt;
int main()
{
	scanf("%d",&nn);
	for(int i=1;i<=nn;i++)
	{
		scanf("%d",&pe[i].t);
		scanf("%d",&pe[i].n);
		for(int j=1;j<=pe[i].n;j++)
		{
			scanf("%d",&pe[i].k[j]);
			if(bo[pe[i].k[j]]==0)cnt++;
			bo[pe[i].k[j]]++;
		}
		while(pe[i].t-pe[bef].t>=86400)
		{
			for(int j=1;j<=pe[bef].n;j++)
			{
				if(bo[pe[bef].k[j]]==1)cnt--;
				bo[pe[bef].k[j]]--;
			}
			bef++;
		}
		printf("%d\n",cnt);
	}
}
2021/5/2 15:15
加载中...