• Codeforces 1178E


    题意:给你一个长度为n的字符串,只包含a, b, c3种字符,字符串中相邻字符一定不同,问是否存在一个长度为n / 2(向下取整)的子序列是回文的,有就输出。

    思路:相邻的字符一定不同,并且一共只有3种字符,那么从这个字符串中的任意两个位置选择长度为2的子串,这两个子串中一定至少有一个字符是一样的。那么做法就出来了。从字符串的两端开始,每次选取最左和最右的两个子串,找出一个相同的字符加入答案。最后如果中间出现了长度小于4的区域,随便选一个加入答案即可。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn = 1000010;
    char s[maxn];
    bool v[maxn];
    int main() {
    	scanf("%s", s + 1);
    	int n = strlen(s + 1);
    	int l, r, ans = 0;
    	for (l = 1, r = n - 1; l + 2 <= r; l += 2, r -= 2) {
    		for (int j = 0; j < 2; j++)
    			for (int k = 0; k < 2; k++) {
    				if(s[l + j] == s[r + k]) {
    					v[l + j] = v[r + k] = 1;
    					ans += 2;
    					goto ed;
    				}
    			}
    		ed:
    			continue;
    	}
    	if(ans < n / 2) {
    		v[l] = 1;
    	}
    	for (int i = 1; i <= n; i++) {
    		if(v[i] == 1)
    			printf("%c", s[i]);
    	}
    	printf("
    ");
    } 
    

      

  • 相关阅读:
    Native RabbitMQ Direct Exchange
    RabbitMQ系列文章导读
    AbstractQueuedSynchronizer
    CountDownLatch和CyclicBarrier
    显示锁Lock
    《SeleniumBasic 3.141.0.0
    《SeleniumBasic 3.141.0.0
    《SeleniumBasic 3.141.0.0
    《SeleniumBasic 3.141.0.0
    《SeleniumBasic 3.141.0.0
  • 原文地址:https://www.cnblogs.com/pkgunboat/p/11221726.html
Copyright © 2020-2023  润新知