社区讨论

样例怎么多个1?

P8661 [蓝桥杯 2018 省 B] 日志统计参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lo334cgh
此快照首次捕获于
2023/10/24 00:01
2 年前
此快照最后确认于
2023/10/24 00:01
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
struct node{
	int id;
	int t;
}a[10005];
int n,d,k;
bool cmp(node x,node y)
{
	if(x.id!=y.id)return x.id<y.id;
	return x.t<y.t;
}
int z[10005];
int h=1,tt=1,o=0;
int f[100005]={0};
int main()
{
	//cout<<f[3]<<'\n';
	for(int i=1;i<=1000;i++)f[i]=0;
	cin>>n>>d>>k;
	a[0].t=-1000;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i].t>>a[i].id;
	}
	sort(a+1,a+n+1,cmp);
	int u=0,x=0;
	for(int i=1;i<=n;i++)
	{
		h=1;tt=2;memset(z,0,sizeof(z));
		if(f[a[i].id]==1)
		{
			continue;
		}
		while(h>=tt-1)
		{
			//if(f[a[i].id]==1)break;
			if(a[o+1].id!=a[i].id)break;
			z[h+1]=a[++o].t;h++;
			//cout<<z[h]<<'\n';
			if(z[h]-z[tt]>=d)tt++;
			int x=0;
			for(int j=tt;j<=h;j++)
			{
				x++;
				if(x>=k)
				{
					if(z[h]-z[tt]>=d)break;
					//if(f[a[i].id]==0)
					cout<<a[i].id<<'\n';
					f[a[i].id]++;
				//	cout<<"t="<<tt<<" h="<<h<<" x="<<x<<" o="<<o<<" z[h]="<<z[h]<<" z[t]="<<z[tt]<<'\n';
					break;
				}
			}
		} 
		u=0,x=0;//
		//cout<<a[i].t<<' '<<a[i].id<<'\n';
	}
}

回复

2 条回复,欢迎继续交流。

正在加载回复...