zoukankan      html  css  js  c++  java
  • 20180228上午

    1.codevs2058括号序列

      其实很简单,遇到左括号无条件入栈,如果栈为空或者当前符号与栈顶不匹配,ok=false,否则匹配成功,t--出栈,当栈为空即所有元素都匹配成功且栈顶指针没有越界时输出true,否则输出false

      

     1 #include <bits/stdc++.h>
     2 #define For(i,l,r) for(int i=(l);i<=(r);i++)
     3 using namespace std;
     4 char a[4000008];
     5 char s[5000000];
     6 int t;
     7 int main(){
     8     int n,len;
     9     bool ok;
    10     scanf("%d
    ",&n);
    11     For(i,1,n){
    12         scanf("%s",s);
    13         t=0;
    14         len=strlen(s);
    15         ok=true;
    16         For(j,0,len-1){
    17             if(s[j]=='{' || s[j]=='('|| s[j]=='['|| s[j]=='<')
    18                 a[++t]=s[j];
    19             else 
    20                 if (t==0 || abs(s[j]-a[t])>2){
    21                     ok=false;
    22                     break;
    23                 }
    24                 else t--;
    25         }
    26         if(t==0&&ok)
    27             printf("TRUE
    ");
    28         else
    29             printf("FALSE
    ");
    30     }
    31     return 0;
    32 }

    2.codevs6674车厢调度

      其实这只是一个栈的模拟,用k表示当前元素,k表示需检查元素,如果有k>po则所有比k小的元素入栈,如果k<=po,判断当前栈顶元素如果等于k,栈顶元素出栈,否则不行输出NO return 0,最后输出YES

      

     1 #include <bits/stdc++.h>
     2 bool ok=true;
     3 int n,a[1000+5],k,po,t;
     4 int main(){
     5     scanf("%d
    ",&n);
     6     t=0;
     7     po=0;
     8     for(int i=1;i<=n;i++){
     9         scanf("%d",&k);
    10         if(k>po){
    11             for(int j=po+1;j<=k;j++)
    12                 a[++t]=j;
    13             po=k;
    14         }
    15         if(k<=po){
    16             if(a[t]==k){
    17                 t--;
    18             }
    19             else{
    20                 printf("NO
    ");
    21                 return 0;
    22             }
    23         }
    24     }
    25         printf("YES
    ");
    26     return 0;
    27 }

    3.codevs1051接龙游戏

      一开始比较晕,一是不知道如何排序,二是不知道如何比较前缀和单词

      1.后来看网上大神的程序,利用string类型可以直接用sort不需要cmp函数

      2.然后就是发现挨个比较不会超时

      一开始如果栈为空,将字符串压入栈,否则看当前元素是否能够和栈顶元素匹配,可以压入栈,否则栈顶元素出栈,ans不断记录最大的栈内元素数,输出即可

      

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 stack<string> s;
     5 string str[100010];
     6 
     7 bool check(string s,string ss)
     8 {
     9     if(s==ss) //如果两个字符串相等,则ss不是s的前缀 
    10         return false;
    11     for(int i=0;i<s.length();i++)
    12     {
    13         if(s[i]!=ss[i]) return false; //逐个比较 
    14     }
    15     return true;
    16 }
    17 
    18 int main()
    19 {
    20     int n;
    21     scanf("%d",&n);
    22     for(int i=1;i<=n;i++)
    23         scanf("%s",str[i]);
    24     sort(str+1,str+1+n);
    25     int ans=0;
    26     for(int i=1;i<=n;i++)
    27     {
    28         if(s.empty())
    29             s.push(str[i]); //如果栈为空,压入栈 
    30         else 
    31         {
    32             while(s.size()) //如果字符串大小不为0 
    33             {
    34                 if(check(s.top(),str[i])) //如果是它的前缀 
    35                 {
    36                     s.push(str[i]); //压入栈 
    37                     break;
    38                 }
    39                 else s.pop(); //否则栈顶元素出栈 
    40             }
    41             if(s.empty())
    42                 s.push(str[i]); //如果栈为空,继续压入 
    43         }
    44         ans=max(ans,(int)s.size()); //取栈中最大元素数 
    45     }
    46     printf("%d",ans);//输出 
    47     return 0;
    48 }

     WARNING!!!1051接龙游戏有问题,string不能当数组用,正在调试。。。。

      

  • 相关阅读:
    UOJ#80. 二分图最大权匹配 模板
    BZOJ2243: [SDOI2011]染色
    LA5713 Qin Shi Huang's National Road System
    BZOJ1977: [BeiJing2010组队]次小生成树 Tree
    LA5009 Error Curves
    BZOJ1013: [JSOI2008]球形空间产生器sphere
    BZOJ2733: [HNOI2012]永无乡
    BZOJ1552: [Cerc2007]robotic sort
    BZOJ3223: Tyvj 1729 文艺平衡树
    网络流24题(24/24)
  • 原文地址:https://www.cnblogs.com/friction/p/8482407.html
Copyright © 2011-2022 走看看