zoj能AC

6 篇文章 0 订阅
题目描述:
对给定的字符串(只包含'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年浙江大学计算机及软件工程研究生机试真题

分析:

AC的情况: a个o  + z + b个o +j + c个o

c=a*b,且b>=1

(o^a)z(o^b)j(o^c)  c=a*b,且b>=1

z,j都只有一个。且j在z之后出现,b>=1可以保证j在z之后出现

import java.util.*;
public class Main {
 
public static boolean check(String s)
    {
        int p=0,q=0,zp,jp,a,b,c;
        p=s.indexOf("z");
        q=s.lastIndexOf("z");
         
        if(p!=q)
        return false;
        if(p==-1)
            return false;
        zp=p;
         
        p=s.indexOf("j");
        q=s.lastIndexOf("j");
        if(p!=q)
        return false;
        if(p==-1)
            return false;
        jp=p;
         
        a=zp;
        b=jp-a-1;
        c=s.length()-jp-1;
        if((c==a*b) && (b>=1))
            return true;
         
        return false;   
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
         
        String t;
        boolean b;        
         
        Scanner scanneer = new  Scanner(System.in);
        while (scanneer.hasNext() )
        {
            t=scanneer.nextLine();
            b=check(t);
             
            if(b)
                System.out.println("Accepted");
            else
                System.out.println("Wrong Answer");                
        }         
    }
}
/**************************************************************
    Problem: 1006
    User: caiyunfree20
    Language: Java
    Result: Accepted
    Time:930 ms
    Memory:27016 kb
****************************************************************/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值