zoukankan      html  css  js  c++  java
  • 九度 题目1006:ZOJ问题

    题目1006:ZOJ问题

    时间限制:1 秒

    内存限制:32 兆

    特殊判题:

    提交:9412

    解决:1483

    题目描述:
    对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC。

    是否AC的规则如下:
    1. zoj能AC;
    2. 若字符串形式为xzojx,则也能AC,其中x可以是N个'o' 或者为空;
    3. 若azbjc 能AC,则azbojac也能AC,其中a,b,c为N个'o'或者为空;
    输入:
    输入包含多组测试用例,每行有一个只包含'z','o','j'三种字符的字符串,字符串长度小于等于1000。
    输出:
    对于给定的字符串,如果能AC则请输出字符串“Accepted”,否则请输出“Wrong Answer”。
    样例输入:
    zoj
    ozojo
    ozoojoo
    oozoojoooo
    zooj
    ozojo
    oooozojo
    zojoooo
    样例输出:
    Accepted
    Accepted
    Accepted
    Accepted
    Accepted
    Accepted
    Wrong Answer
    Wrong Answer
    来源:
    2010年浙江大学计算机及软件工程研究生机试真题
     

    虽然第一眼看去像是DP题 但是有规律可循的 首先z j各一个 其次被z和j分成3段的o的个数满足(i,j,i*j) i>=0 j>=1的关系

    #include<iostream>
    #include<cstring>
    using namespace std;
    int main()
    {
     char str[1010];
     int a,b,c,z,i,j,iz,ij;
     int flag1,flag2;
     while(cin>>str)
     {
      flag1 = flag2 = 0;
      a=b=c=z=j=iz=ij=0;
      for(i=0;i<strlen(str);i++)
      {
       if(str[i]=='z')
       {
        z++;
        iz = i;
       }else if(str[i]=='j')
       {
        j++;
        ij = i;
       }

      }//for
      if(z!=1||j!=1||(z==1&&j==1&&iz>ij))
       cout<<"Wrong Answer"<<endl;
      else{


       for(i=0;i<strlen(str);i++)
       {
        if(flag1==0&&str[i]=='o')
         a++;
        else if(flag1==0&&str[i]=='z')
         flag1 = 1;
        else if(flag2==0&&str[i]=='o')
         b++;
        else if(flag2==0&&str[i]=='j')
         flag2=1;
        else
         c++;
       }//for

       if(a*b==c&&b!=0)
        cout<<"Accepted"<<endl;
       else
        cout<<"Wrong Answer"<<endl;
      }//else
     }//while
     
     return 0;
    }

  • 相关阅读:
    分布式事务-第一刀
    Qt
    自描述C++部分面试题集
    读书笔记6.21
    STL vector容器 和deque容器
    C++ STL框架
    C++ 多态
    C++ 虚继承
    C++ 类的继承和派生
    C++ 类中的函数重载
  • 原文地址:https://www.cnblogs.com/hpuwangjunling/p/2994764.html
Copyright © 2011-2022 走看看