zoukankan      html  css  js  c++  java
  • 时间复杂度(模拟)

    满分做法:

    不难发现,可以用树形结构递归求解,在此说一些易错点。

    1.要用双端队列储存第几个循环。

    2.读到E时就队尾,如果已经空了,就是ERR。注意每次要把循环下标清零。

    3.当x,y都是n,他是o1的,可以往下搜索。

    #include<map>
    #include<queue>
    #include<algorithm>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<deque>
    using namespace std;
    int t;
    int l;
    char fzd[10];
    int num;
    bool flag;
    char b[210];
    map<char,bool> mp;
    deque<int> q; 
    int tot,pre[210],last[210],other[210],w[210];
    void add(int x,int y)
    {
     tot++;
     pre[tot]=last[x];
     last[x]=tot;
     other[tot]=y; 
    }
    int dfs(int x)
    {
     int tmp=w[x],sum=0;
     for(int p=last[x];p;p=pre[p])
     {
      int v=other[p];
      if(w[v]==-1) continue;
      sum=max(sum,dfs(v));
     }
     return tmp+sum;
    }
    int main()
    {
     scanf("%d",&t);
     while(t--)
     {
       tot=0;
       q.clear();
       memset(last,0,sizeof(last));
       memset(w,0,sizeof(w));
       flag=0;
       num=0;
       mp.clear();
       scanf("%d",&l);
       scanf(" O(%s)",fzd+1);
       int len=strlen(fzd+1);
       if(len==1) num=0;
       else
       {
       	 for(int i=3;i<=len-1;i++)
       	 num*=10,num+=fzd[i]-'0';
       }
       for(int i=1;i<=l;i++)
       {
       	 char s;
    	 cin>>s;
    	 if(s=='F')
    	 {
    	   cin>>b[i];
    	   if(mp[b[i]])
    	   flag=1;
    	   mp[b[i]]=1;
    	   char kai[5],ed[5];
    	   scanf("%s",kai+1);
    	   scanf("%s",ed+1);
    	   int l1=strlen(kai+1);
    	   int l2=strlen(ed+1);
    	   int num1=0,num2=0;
    	   for(int j=1;j<=l1;j++)
    	   {
    	   	 if(kai[j]=='n')
    	   	 {
    	   	    w[i]=-1;
    		    continue;	
    	   	 }
    	   	 num1*=10;
    	   	 num1+=kai[j]-'0';
    	   }
    	   for(int j=1;j<=l2;j++)
    	   {
    	   	  if(ed[j]=='n')
    	   	  {
    	   	     if(kai[1]!='n')
    			 w[i]=1;
    	   	  }
    	   	  num2*=10;
    	   	  num2+=ed[j]-'0';
    	   }
    	   if(w[i]==0)
    	   {
    	   	 if(num1<=num2)
    	   	 w[i]=0;
    	   	 else w[i]=-1;
    	   }
    	   if(kai[1]=='n'&&ed[1]=='n')
    	   w[i]=0;
    	   if(q.size()) add(q.back(),i);
    	   if(q.empty()) add(0,i);
    	   q.push_back(i);
         }
         else
         {
          if(q.empty())
    	  {
    	   flag=1;
    	   continue;
          }
          mp[b[q.back()]]=0;
          q.pop_back();
         }
       }
       if(flag||q.size())
       {
       	 printf("ERR
    ");
       	 continue;
       }
       int ans=dfs(0);
       if(ans==num)
       printf("Yes
    ");
       else 
       printf("No
    ");
     }
     return 0;	
    }
    
  • 相关阅读:
    java.lang.RuntimeException: HRegionServer Aborted的问题
    Solr 读数据流程
    Solr 写数据流程
    solr索引创建流程
    Solr 倒排索引
    Solr 核心组成
    Solr的关键特性
    poj3308 Paratroopers --- 最小点权覆盖-&gt;最小割
    YII 路由配置
    MySQL具体解释(5)-----------函数超全总结
  • 原文地址:https://www.cnblogs.com/lihan123/p/11808165.html
Copyright © 2011-2022 走看看