cjb-poi2010intelligencetest

从 Trac 迁移的文章

这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。

原文章内容如下:

{{{
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <cmath>
using namespace std;
#define rep(i,n) for(int i=1;i<=n;++i)
#define mp make_pair
#define pb push_back
int a[1100000];
vector<int> b[1100000];
vector<pair<int,int> > now[1100000];
vector<pair<int,int> > tmp;
int len[1100000];
int v[1100000];
int n,q;
int main()
{
    cin>>n;
    rep(i,n)scanf("%d",&a[i]);
    cin>>q;
    rep(i,q)
    {
        scanf("%d",&len[i]);
        rep(j,len[i]){ int x; scanf("%d",&x); b[i].pb(x); }
    }
    rep(i,q)now[b[i][0]].pb(mp(i,0));
    rep(i,n)
    if (now[a[i]].size())
    {
        tmp.clear();
        for(auto p:now[a[i]])tmp.pb(p); 
        now[a[i]].clear();
        for(auto p:tmp)
            if (p.second==len[p.first]-1)v[p.first]=1;
            else now[b[p.first][p.second+1]].pb(mp(p.first,p.second+1));
    }
    rep(i,q)puts(v[i]?"TAK":"NIE");
}
}}}
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <cmath>
using namespace std;
#define rep(i,n) for(int i=1;i<=n;++i)
#define mp make_pair
#define pb push_back
int a[1100000];
vector<int> b[1100000];
vector<pair<int,int> > now[1100000];
vector<pair<int,int> > tmp;
int len[1100000];
int v[1100000];
int n,q;
int main()
{
    cin>>n;
    rep(i,n)scanf("%d",&a[i]);
    cin>>q;
    rep(i,q)
    {
        scanf("%d",&len[i]);
        rep(j,len[i]){ int x; scanf("%d",&x); b[i].pb(x); }
    }
    rep(i,q)now[b[i][0]].pb(mp(i,0));
    rep(i,n)
    if (now[a[i]].size())
    {
        tmp.clear();
        for(auto p:now[a[i]])tmp.pb(p); 
        now[a[i]].clear();
        for(auto p:tmp)
            if (p.second==len[p.first]-1)v[p.first]=1;
            else now[b[p.first][p.second+1]].pb(mp(p.first,p.second+1));
    }
    rep(i,q)puts(v[i]?"TAK":"NIE");
}