1003. 我要通过!(20)(两种语言的运行时间差异)

答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。

得到“答案正确”的条件是:

1. 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;

2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;

3. 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a, b, c 均或者是空字符串,或者是仅由字母 A 组成的字符串。

现在就请你为PAT写一个自动裁判程序,判定哪些字符串是可以获得“答案正确”的。

输入格式:
每个测试输入包含1个测试用例。第1行给出一个自然数n (<10),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过100,且不包含空格。

输出格式:每个字符串的检测结果占一行,如果该字符串可以获得“答案正确”,则输出YES,否则输出NO。

输入样例:

8
PAT
PAAT
AAPATAA
AAPAATAAAA
xPATx
PT
Whatever
APAAATAA

输出样例:

YES
YES
YES
YES
NO
NO
NO
NO

思路:这题主要是第三个条件,就是想告诉你,P前面的A的数量和P和T中间A的数量相乘等于T后面A的数量

这题我用了C语言和java语言两种语言做,因为这几天我一直在想java和C的运行时间到底差多少,其实我还是比较偏向用java做,但是一些题目给定的时间太少了,比我只能用不擅长的C做,而且C有些库我还不大熟悉,C的进阶(C++)更没有多余时间去学习,经过网上的了解,C++有很多类似java的库,操作起来很方便,但是我已经没时间去学习了,先上效率图


C的比java快的不是一点点,毕竟是最接近底层的语言,我两种语言的思路都是一样的,所以代码有很多类似的地方(基本一样,除了输入输出不一样)
import java.util.Scanner;

public class Main{

	public static void main(String[] args) {
	    Scanner in = new Scanner(System.in);
	    int n = in.nextInt();
	    in.nextLine();
	    boolean flag;
	    while(n>0){
	    	flag = true;
	    	int pcount=0;
	    	int tcount=0;
	    	int acount=0;
	    	int pindex = 0,tindex=0;
	        String s = in.nextLine();
	        char[] ch = s.toCharArray();
	        for(int i =0 ;i<ch.length;i++){
	        	if(ch[i]==‘P‘) pindex=i;
	        	if(ch[i]==‘T‘) tindex=i;
	        	if(tindex<pindex&&i==ch.length-1) {
	        		flag=false;
	        		break;
	        	}
	        	if(ch[i]!=‘P‘&&ch[i]!=‘A‘&&ch[i]!=‘T‘){
	        		flag=false;
	        		break;
	        	}
	        	if(pcount>1||tcount>1){
	        		flag=false;
	        		break;
	        	}

	        	if(ch[i]==‘P‘){
	        		pcount++;
	        	}
	        	if(ch[i]==‘A‘){
	        		acount++;
	        	}
	        	if(ch[i]==‘T‘){
	        		tcount++;
	        	}
	        	if(i==ch.length-1&&(pcount==0||tcount==0||acount==0)){
	        		flag=false;
	        	}
	        }
	        if(flag){
	        	int a1=0,a2=0,a3=0;
                for(;ch[a1]!=‘P‘;a1++);
	        	a2 = tindex - pindex-1;
	        	a3 =ch.length - tindex-1;
	        	if(a1*a2==a3){
	        		System.out.println("YES");
	        	}else{
	        		System.out.println("NO");
	        	}
	        }else{
	        	System.out.println("NO");
	        }

	    	n--;
	    }

	}

}
				
时间: 2024-10-15 01:41:20

1003. 我要通过!(20)(两种语言的运行时间差异)的相关文章

详谈线性表的有关操作(Java、C两种语言)

    之前在学习线性表一章的时候,有些地方都是比较含糊的带过,只是把一些比较难理解的地方花了好长时间才明白....然后写出代码,存在博客上面.从今天开始,将重新把数据结构这本书走一遍,用C和Java两种语言,尽量把每个部分都可以用代码实现一遍,使印象更加深刻,也算是重新学习一下C语言啦~~.而且现在新学期开始学Oracle啦,也会把一些学习过程中的代码以及重点难点记录下来,希望大家会关注哦~~    线性表的概念都在之前的文章有提到,今天来说一下有关线性表的具体操作(数组实现),分为以下几个部

使用OC和Swift两种语言写一个发射烟花的小项目

OC与Swift两种实现方式基本上区别不大,主要是在一些对象或方法的调用方式不同 OC代码样式: self.view.backgroundColor = [UIColor blackColor]; //加载颗粒状的火花图片 CAEmitterLayer *emitterLa = [CAEmitterLayer layer]; emitterLa.emitterPosition = CGPointMake(self.view.bounds.size.width/2, self.view.bound

两种语言实现设计模式(C++和Java)(五:代理模式)

参考:https://blog.csdn.net/lh844386434/article/details/18045671 代理模式指为其他对象提供一种代理以控制对这个对象的访问.这样实现了业务和核心功能分离. Subject: 抽象角色.声明真实对象和代理对象的共同接口.Proxy: 代理角色.代理对象与真实对象实现相同的接口,所以它能够在任何时刻都能够代理真实对象.代理角色内部包含有对真实对象的引用,所以她可以操作真实对象,同时也可以附加其他的操作,相当于对真实对象进行封装.RealSubj

两种语言实现设计模式(C++和Java)(十四:责任链模式)

责任链模式实现为请求创建了一个接收者对象的链.当请求的直接执行者无法实现请求时,会将请求传递给链的上一级进行处理.这种传递往往可以通过让接收者包含另一个接收者的引用的方式实现. 责任链模式是一种对象行为型模式,其主要优点如下. 降低了对象之间的耦合度.该模式使得一个对象无须知道到底是哪一个对象处理其请求以及链的结构,发送者和接收者也无须拥有对方的明确信息. 增强了系统的可扩展性.可以根据需要增加新的请求处理类,满足开闭原则. 增强了给对象指派职责的灵活性.当工作流程发生变化,可以动态地改变链内的

两种语言实现设计模式(C++和Java)(十六:状态模式)

状态模式对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为. 状态模式是一种对象行为型模式,其主要优点如下. 状态模式将与特定状态相关的行为局部化到一个状态中,并且将不同状态的行为分割开来,满足“单一职责原则”. 减少对象间的相互依赖.将不同的状态引入独立的对象中会使得状态转换变得更加明确,且减少对象间的相互依赖. 有利于程序的扩展.通过定义新的子类很容易地增加新的状态和转换. 状态模式的主要缺点如下. 状态模式的使用必然会增加系统的类与对象

#python+java#同样功能的代码两种语言实现

概述:设置两个数组/列表,列表a是[1,2,3],列表b是['a','b','c'],把他们一对一对打印出来,但不打印"3:c"这对. python版: ''' Created on 2014-11-2 @author: Administrator ''' class MyArray:     def __init__(self):         self.a = range(1,4)         self.b = ['a','b','c']     def getValue(s

透视变换 任意角度 三维透视 python c++ opemcv两种语言

效果图:键盘控制各个x,y,z,还有fov数值 一开始的w, h = img.shape[0:2]这里宽.高错乱,原因未知,只能这么用 python版本的: # -*- coding:utf-8 -*- import cv2 import numpy as np def rad(x): return x * np.pi / 180 img = cv2.imread("./dog.jpeg") cv2.namedWindow("original",0) cv2.ims

一个功能,两个平台,三种语言 -(iOS,Swift,Android)App代码实现对比篇

-调研 话说移动互联网正值风起云涌期间,各路编程高手都是摩拳擦掌,何况企业公司都开始接受现实,走移动办公,信息云端,大数据处理的步伐,在这本该三足鼎立的时刻,微软显得有点步履蹒跚,导致移动端最值得进军的平台被iOS 和 Android 几乎瓜分,这不符合历史轨迹啊,希望 WP 能厚积薄发,重回当年PC时代的辉煌. -前序 这里就不再指点江山,直奔主题吧,来看看做同样一个功能,在iOS平台和Android平台都是具体如何实现的,代码是如何写的,这里有个分支就是iOS平台开发又分为Objective

Spring data JPA 理解(默认查询 自定义查询 分页查询)及no session 两种处理方法

简介:Spring Data JPA 其实就是JDK方式的动态代理 (需要一个接口 有一大堆最上边的是Repository接口来自org.springframework.data.repository,还有CrudRepository接口及一个实现类SimpleJpaRepository),只要有接口就可以查询数据库了,实际上就是proxy的方法,具体查询的方法有两种一种是简单式就是方法名为findBy+属性名+(AndOrIsEquals等)另一种是自定义的方法就是属性名是瞎起的向abc xy