一个小问题
查看原帖
一个小问题
184508
dnbd楼主2020/9/19 17:31

这是70分代码,re了几个点

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<cstdlib>
#include<iomanip>
#include<string>
#include<algorithm>
#include<queue>
using namespace std;

long long m,n,k,tim,sum;

long long book[3000005],start;

struct node{
	long long time;
	int gj;
}a[300005];

long long maxn[300005];

int main()
{
//	freopen("haigang.in","r",stdin);
//	freopen("haigang.out","w",stdout);
	cin>>m;
	for(int i=1;i<=m;++i)
	{
		cin>>tim>>n;
		if(i>1)
		while(a[start].time<=tim-86400)	{
			book[a[start].gj]--;
			if(book[a[start].gj]==0)	sum--;
			start++;
		}
		long long x;
		for(int j=1;j<=n;++j)
		{
			cin>>x;
			a[++k].gj=x;
			a[k].time=tim;
			book[x]++;
			if(book[x]==1)	sum++;
		}
		maxn[i]=sum;
	}
	for(int i=1;i<=m;++i)
		cout<<maxn[i]<<endl;
	
	return 0;
}

这是AC代码(看了题解改了)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<cstdlib>
#include<iomanip>
#include<string>
#include<algorithm>
#include<queue>
using namespace std;

int m,n,tim,sum;

int book[1000005];

struct node{
	int time;
	int gj;
};

int main()
{
	scanf("%d",&m);
	queue <node> q;	
	for(int i=1;i<=m;++i)
	{
		scanf("%d%d",&tim,&n);
		while(!q.empty())	{
			if(q.front().time<=tim-86400)
			{
			book[q.front().gj]--;
			if(book[q.front().gj]==0)	sum--;
			q.pop();
			}
			else
				break;
		}
		node x;
		x.time=tim;
		for(int i=1;i<=n;++i)
		{
			scanf("%d",&x.gj);
			q.push(x);
			book[x.gj]++;
			if(book[x.gj]==1)	sum++;
		}
		printf("%d\n",sum);
	}
	
	
	return 0;
}

请问dalao为什么第一次会RE?是队列出问题了?

2020/9/19 17:31
加载中...