• Codeforces Round #215 (Div. 1) B


    出来冒个泡

    由于数比较大  开了map计数  然后边走边删边加 勉强可过

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<stdlib.h>
     6 #include<queue>
     7 #include<map>
     8 #include<string>
     9 using namespace std;
    10 #define LL long long
    11 #define N 200010
    12 int a[N],b[N],ff[N],o[N],g,vis[N];
    13 map<int,int>f;
    14 map<int,int>q;
    15 map<int,int>qq;
    16 int main()
    17 {
    18     int i,kq=0;
    19     LL n,m,p;
    20     cin>>n>>m>>p;
    21     for(i = 1; i <= n ; i++)
    22     cin>>a[i];
    23     for(i = 1; i <= m ; i++)
    24     {
    25         cin>>b[i];
    26         if(!q[b[i]]) kq++;
    27         q[b[i]]++;
    28     }
    29     int k = 0;
    30     for(int e = 1; e <= n ; e++)
    31     {
    32         if(vis[e]) continue;
    33         if(e+(m-1)*p>n) break;
    34         k = 0;
    35         f.clear();qq.clear();
    36         while(k<m&&e+k*p<=n)
    37         {
    38             f[a[e+k*p]]++;
    39             vis[e+k*p] = 1;
    40             k++;
    41         }
    42         int s=0;
    43         for(i = 1; i <= m ; i++)
    44         {
    45             if(f[b[i]]==q[b[i]]&&!qq[b[i]])
    46             {
    47                 s++;
    48                 qq[b[i]] = 1;
    49             }
    50         }
    51         if(s==kq)
    52         {
    53             g++;
    54             o[g] = e;
    55         }
    56         int j = e+p;
    57         while(j+(m-1)*p<=n)
    58         {
    59             int k1 = f[a[j-p]],k2 = q[a[j-p]],k3 = f[a[j+(m-1)*p]],k4 = q[a[j+(m-1)*p]];
    60             f[a[j-p]]--;
    61             f[a[j+(m-1)*p]]++;
    62             vis[j+(m-1)*p] = 1;
    63             if(a[j-p]!=a[j+(m-1)*p])
    64             {
    65                 if(q[a[j-p]])
    66                 {
    67                    if(k1==k2)
    68                    s--;
    69                    else if(f[a[j-p]]==q[a[j-p]]){s++;}
    70                 }
    71                 if(q[a[j+(m-1)*p]])
    72                 {
    73                     if(k3==k4) s--;
    74                     else if(f[a[j+(m-1)*p]]==q[a[j+(m-1)*p]]) s++;
    75                 }
    76             }
    77             if(s==kq)
    78             {
    79                g++;
    80                o[g] = j;
    81             }
    82             j+=p;
    83         }
    84     }
    85     sort(o+1,o+g+1);
    86     cout<<g<<endl;
    87     for(i = 1 ; i <= g ; i++)
    88     cout<<o[i]<<" ";
    89     return 0;
    90 }
    View Code
  • 相关阅读:
    Java中对话框的弹出
    数据格式化和ModelAttribute注解的介绍
    SpringMVC的环境搭建
    Js基础之数组
    Js基础之函数
    POJ-3208 Apocalypse Someday (数位DP)
    HDU-6148 Valley Number (数位DP)
    [SCOI2009] [BZOJ1026] windy数
    POJ-2411 Mondriann's Dream (状压DP)
    「SCOI2005」互不侵犯 (状压DP)
  • 原文地址:https://www.cnblogs.com/shangyu/p/3445530.html
Copyright © 2020-2023  润新知