zoukankan      html  css  js  c++  java
  • 潍坊学院第四届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;
    }
    

      

  • 相关阅读:
    微人事项目-mybatis-持久层
    通过外键连接多个表
    springioc
    Redis 消息中间件 ServiceStack.Redis 轻量级
    深度数据对接 链接服务器 数据传输
    sqlserver 抓取所有执行语句 SQL语句分析 死锁 抓取
    sqlserver 索引优化 CPU占用过高 执行分析 服务器检查
    sql server 远程备份 bak 删除
    冒泡排序
    多线程 异步 beginInvoke EndInvoke 使用
  • 原文地址:https://www.cnblogs.com/clb123/p/12006708.html
Copyright © 2011-2022 走看看