2016普及组t3海港

时间:2023-03-09 09:38:05
2016普及组t3海港

好的,说说这道题的思路,爆搜队列嘛:

用一个结构体队列存每个人来的时间和他的国籍,用一个vis数组存每个人来的次数,是第一次来sum便加一。

然后从前面第一个人开始扔(原谅我用这个词,因为我找不到更好的词了)下船,直到第一个人与当前这艘船相差没超过1天即可,每扔一个人便vis[此人国籍]减一,当这个人来的次数为0时,sum减一。

就这样,既不爆时间也不爆空间,完美!

#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<string>
#define FOR(x,y,z) for(int x=y;x<=z;x++)
#define REP(x,y,z) for(int x=y;x>=z;x--)
#define ll long long
using namespace std;
,n,t,k,r,w[],x[],y[];
int main()
{
    cin>>n;
    while(n--)
    {
        cin>>t>>k;
        while(k--)
        {
            y[++r]=t;
            cin>>x[r];
            )s++;
            w[x[r]]++;
        }
        )
        {
            w[x[i]]--;
        )
            s--;
            i++;
        }
        printf("%d\n",s);
    }
}