欢迎大家来找不同
查看原帖
欢迎大家来找不同
250983
wzmzmhk楼主2021/10/6 10:19

这是我之前写的一篇(码凤较丑,见谅):

#include<bits/stdc++.h>
using namespace std;
struct node
{
	int t;
	int n;
}q[5000000];
int front,rear,n,vis[5000000],sum;
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		int t,k;
		cin>>t>>k;
		for(int j=1;j<=k;j++)
		{
			int x;
			cin>>x;
			q[rear].t=t;
			q[rear].n=x;
			rear++;
			vis[x]++;
			if(vis[x]==1)
			{
				sum++;
			}
		}
		while(1)
		{
			int a=q[front].t,b=q[front].n;
			if(t-a<86400)
			{
				break;
			}
			vis[b]--;
			if(vis[b]==0)
			{
				sum--;
			}
			front++;
		}
		cout<<sum<<endl;
	}
  return 0;
}

今天又做了一遍,结果只有40pts,其他全WA(相对之前码凤较好):

#include <bits/stdc++.h>
using namespace std;

#define maxm 10000005
#define int long long
#define _for(i, a, b)  for (int i = (a); i <= (b); i++)
#define maxn maxm

struct sea {
    int t, nation;
}s[maxm];

int n, ans;
int head = 1, tail;
int sum[maxn];
int t[maxn], num[maxn];

signed main() {
    //freopen("luoguP2058.in", "r", stdin);
    //freopen("luoguP2058.out", "w", stdout);
    scanf("%lld", &n);
    _for (i, 1, n) {
        scanf("%lld%lld", t + i, num + i);
        _for (j, 1, num[i]) {
            scanf("%lld", &s[++tail].nation);
            s[tail].t = t[i];
            sum[s[tail].nation]++;
            if (sum[s[tail].nation] == 1)
                ans++;
        }
        while(t[i] - s[head].t >= 86400) {
            sum[s[tail].nation]--;
            if(!sum[s[tail].nation])
                ans--;
            head++;
        }
        printf("%lld\n", ans);
    }
    return 0;
}

2021/10/6 10:19
加载中...