2016藍橋杯省賽C/C++A組第九題 密碼脫落


題意:

X星球的考古學家發現了一批古代留下來的密碼。 
這些密碼是由A、B、C、D 四種植物的種子串成的序列。 
仔細分析發現,這些密碼串當初應該是前后對稱的(也就是我們說的鏡像串)。 
由於年代久遠,其中許多種子脫落了,因而可能會失去鏡像的特征。

你的任務是: 給定一個現在看到的密碼串,計算一下從當初的狀態,它要至少脫落多少個種子,才可能會變成現在的樣子。

輸入一行,表示現在看到的密碼串(長度不大於1000) 
要求輸出一個正整數,表示至少脫落了多少個種子。

例如,輸入: 
ABCBA 
則程序應該輸出: 

再例如,輸入: 
ABECDCBABC 
則程序應該輸出: 
3

分析:貪心。

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1000 + 10;
char s[MAXN];
int main(){
    scanf("%s", s);
    int len = strlen(s);
    int i = 0, j = len - 1;
    int ans = 0;
    while(i <= j){
        if(s[i] == s[j]){
            ++i;
            --j;
        }
        else{
            int ti = i;
            while(ti < j && s[ti] != s[j]){
                ++ti;
            }
            int tj = j;
            while(tj >= i && s[tj] != s[i]){
                --tj;
            }
            if(abs(ti - i) < abs(tj - j)){
                ans += abs(ti - i);
                i = ti;
            }
            else{
                ans += abs(tj - j);
                j = tj;
            }
        }
    }
    printf("%d\n", ans);
    return 0;
}

  


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com