• 潍坊学院第四届acm程序设计竞赛I题(Bob的难题)


    Bob的难题

    Description

    Bob 有一个字符串s,但是他并不知道s具体是什么,他只知道s是由小写英文字母组成。现在定义一个字符串s′,s′是把s中所有的小写英文字母"a"去掉(其它字母的前后顺序保持不变)。此时Bob利用计算机产生了一个新的字符串T,T是由s和s′相连的,换句话说T=s+s′(s必须在s′前面)。

    给你一个字符串T,你的任务是寻找一个字符串s满足给定的条件。如果可以找到,它将是唯一的。

    Input

    输入只有一行。输入一个只由小写英文字母组成的字符串T,T的长度不超过100000。

    Output

    输出只有一行。如果找到字符串s,输出一个字符串s;否则,输出 ":(" (没有引号);

    数据范围:

    T的长度∈[1,100000]

    Sample Input 1 

    aaaaa

    Sample Output 1

    aaaaa

    Sample Input 2 

    aacaababc

    Sample Output 2

    :(

    Sample Input 3 

    ababacacbbcc

    Sample Output 3

    ababacac

    Sample Input 4 

    baba

    Sample Output 4

    :(

    Hint

    第一个样例,s="aaaaa",s′="" 。

    第二个样例,没有找到s 。

    第三个样例,s="ababacac",s′="bbcc"。

    第四个样例,没有找到s 。

    积累的经验:第一次交超时,为什么呢,因为程序中,我用了大量的strlen,而没有直接设置一个值int让他等于strlen

    然后再交还是错,因为ans没有初始化为0,因为ans记录的是a在字符串中的位置,当样例bb的时候,因为ans没初始化,所以ans的值千奇百怪,造成wa

    这次教训印象深刻,总的来说还是自己太菜了。一些小习惯没培养好

    #include<bits/stdc++.h>
    using namespace std;
    const int N = 1e5+10;
    char a[N],b[N];
    int main()
    {
    	scanf("%s",a);
    	int cnt = 0;
    	int ans = 0;
    	int x = strlen(a);
    	for(int i = 0; i < x; i++) {
    		if(a[i] != 'a') {
    			b[cnt++] = a[i];
    		}
    		else {
    			ans = i;
    		}
    	}
    	if((cnt % 2 != 0) || (ans >= x-(cnt/2))) {
    		printf(":(");
    	}
    	else{
    		for(int i = 0; i < cnt/2; i++) {
    			if(b[i] != b[(cnt/2)+i]) {
    				printf(":(");
    				return 0;
    			}
    		}
    		for(int i = 0; i < x-(cnt/2); i++) {
    			printf("%c",a[i]);
    		}
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    url-pattern / /*匹配
    velocity入门
    配置eclipse插件
    Myeclipse 2014 破解
    Eclipse kepler 安装 Dynamic Web Project差距WTP
    Errors running builder 'Faceted Project Validation Builder' on project
    JSF web.xml的各类参数属性配置
    bpm 学习笔记一
    love is ... ...
    .sh_history文件的管理机制
  • 原文地址:https://www.cnblogs.com/clb123/p/12006708.html
Copyright © 2020-2023  润新知