• LOJ P3952 时间复杂度 noip 暴力 模拟


    https://www.luogu.org/problemnew/show/P3952

    模拟,日常认识到自己zz。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cmath>
     6 #include<vector>
     7 using namespace std;
     8 const int maxn=110;
     9 char ch[20];
    10 int n,ans,ke;
    11 int f[maxn]={},x[maxn]={},l[maxn]={},r[maxn]={};
    12 int vis[maxn][30]={},fa[maxn]={},dep[maxn]={};
    13 void dfs(int num,int dui){
    14     if(num>n){if(dui)ke=1;return;}
    15     if(f[num]==0){
    16         if(dui==0){ke=1;return;}
    17         dfs(num+1,fa[dui]);
    18         return;
    19     }
    20     if(vis[dui][x[num]]){ke=1;return;}
    21     for(int i=1;i<=26;i++)
    22         vis[num][i]=vis[dui][i];
    23     fa[num]=dui;vis[num][x[num]]=1;
    24     if(l[num]<=r[num]&&!((l[num]==0)^(r[num]==0))){
    25         dep[num]=dep[dui];
    26         ans=max(ans,dep[num]);
    27         dfs(num+1,num);
    28     }
    29     else if(r[num]==0){
    30         dep[num]=dep[dui]+1;
    31         ans=max(ans,dep[num]);
    32         dfs(num+1,num);
    33     }
    34     else{
    35         int k=num+1,z=1,du=num;
    36         while(z){
    37             if(!f[k]){
    38                 --z;du=fa[du];
    39             }
    40             else{
    41                 if(vis[du][x[k]])ke=1;
    42                 for(int i=1;i<=26;i++)
    43                     vis[k][i]=vis[du][i];
    44                 fa[k]=du;vis[k][x[k]]=1;du=k;
    45                 ++z;
    46             }
    47             ++k;
    48         }k--;
    49         if(k<n+1){
    50             dfs(k+1,dui);
    51         }
    52         else{
    53             ke=1;return;
    54         }
    55     }
    56 }
    57 int main(){
    58     int T;scanf("%d",&T);
    59     while(T-->0){
    60         memset(f,0,sizeof(f));
    61         memset(fa,0,sizeof(fa));
    62         memset(vis,0,sizeof(vis));
    63         memset(dep,0,sizeof(dep));
    64         scanf("%d",&n); scanf("%s",ch); int k=0;
    65         if(ch[2]!='1') for(int i=4;ch[i]!=')';i++) k=k*10+ch[i]-'0';
    66         for(int i=1;i<=n;i++){
    67             scanf("%s",ch);
    68             if(ch[0]=='F'){
    69                 f[i]=1;
    70                 scanf("%s",ch);
    71                 x[i]=ch[0]-'a'+1;
    72                 scanf("%s",ch); l[i]=0;
    73                 if(ch[0]!='n'){
    74                     for(int j=0;ch[j]>='0'&&ch[j]<='9';j++)l[i]=l[i]*10+ch[j]-'0';
    75                 }
    76                 scanf("%s",ch); r[i]=0;
    77                 if(ch[0]!='n'){
    78                     for(int j=0;ch[j]>='0'&&ch[j]<='9';j++)r[i]=r[i]*10+ch[j]-'0';
    79                 }
    80             }else f[i]=0;
    81         }
    82         ans=0;ke=0;dfs(1,0);
    83         if(ke)printf("ERR
    ");
    84         else if(ans==k)printf("Yes
    ");
    85         else printf("No
    ");
    86     }
    87     return 0;
    88 }
    View Code

  • 相关阅读:
    mysql 45讲 索引的使用 09-11
    mysql 45讲 相关锁的概念 06-08
    mysql 45讲 深入浅出索引04-05
    mysql 45讲 概览 01-03
    AQS源码解析第二回
    面试相关-怎么实现限流功能
    人工智能必备数学基础:线性代数基础(2)
    Elasticsearch问题总结和解决方法
    spring boot中打印所有日志
    Java中Stream流里面的findFirst()和findAny()区别
  • 原文地址:https://www.cnblogs.com/137shoebills/p/8677153.html
Copyright © 2020-2023  润新知