zoukankan      html  css  js  c++  java
  • bzoj 2083 [Poi2010]Intelligence test——思路+vector/链表

    题目: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;
    }
  • 相关阅读:
    适配器
    适配器
    哈希容器
    迭代器
    redis介绍
    9内核同步介绍
    Redis基础数据结构
    springCloud-Eureka源码分析
    zookeeper伪分布式集群环境搭建
    消息队列核心-如何保证消息不丢失
  • 原文地址:https://www.cnblogs.com/Narh/p/9809389.html
Copyright © 2011-2022 走看看