码迷,mamicode.com
首页 > 其他好文 > 详细

bzoj 2083 [Poi2010]Intelligence test——思路+vector/链表

时间:2018-10-18 11:41:21      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:back   online   tin   amp   color   题目   https   first   target   

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2083

给每个值开一个vector。每个询问挂在其第一个值上;然后枚举给定序列,遇到一个值就访问那个值的vector,把里面的询问序列都向前推进一位,挂在新的值的vector里。

注意不要一边消一边挂,因为可能消的和挂的是同一个值;只要临时存一下就行了。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int N=1e6+5;
int n,m,a[N],len[N],p[N],top;
vector<int> b[N],w[N];
pair<int,int> sta[N];
int rdn()
{
  int ret=0;bool fx=1;char ch=getchar();
  while(ch>9||ch<0){if(ch==-)fx=0;ch=getchar();}
  while(ch>=0&&ch<=9) ret=(ret<<3)+(ret<<1)+ch-0,ch=getchar();
  return fx?ret:-ret;
}
int main()
{
  m=rdn();for(int i=1;i<=m;i++)a[i]=rdn();
  n=rdn();
  for(int i=1;i<=n;i++)
    {
      len[i]=rdn();
      for(int j=1,d;j<=len[i];j++)
    d=rdn(),b[i].push_back(d);
      p[i]=0;
      w[b[i][p[i]]].push_back(i);
    }
  for(int i=1;i<=m;i++)
    {
      int d=w[a[i]].size();top=0;
      for(int j=d-1;j>=0;j--)
    {
      int k=w[a[i]][j];
      w[a[i]].pop_back(); p[k]++;
      if(p[k]==len[k])continue;
      int c=b[k][p[k]];
      sta[++top]=make_pair(c,k);
    }
      for(int i=1;i<=top;i++)
    w[sta[i].first].push_back(sta[i].second);
    }
  for(int i=1;i<=n;i++)
    puts(p[i]==len[i]?"TAK":"NIE");
  return 0;
}

 

bzoj 2083 [Poi2010]Intelligence test——思路+vector/链表

标签:back   online   tin   amp   color   题目   https   first   target   

原文地址:https://www.cnblogs.com/Narh/p/9809389.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!