寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

Aizu Online Judge in C++ #Volume22 - 2260 : (iwi)

Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。

・問題: (iwi)

onlinejudge.u-aizu.ac.jp
'i', 'w', '(', ')' からなる文字列が与えられた時, 一部の文字を他の文字に置き換えて,'i', 'w', '(', ')' からなる左右に線対称な文字列にしたい. 文字の追加や削除は許さず,1 文字を別の 1 文字に変える操作のみを行うことにする. 少なくとも何文字置き換えなければならないかを出力するプログラムを作成せよ.

僕が作成、提出したコードは、以下のとおりです。

Aizu Online Judge in C++ #Volume22 - 2260 : (iwi)
/*
Aizu Online Judge in C++ #Volume22 - 2260 : (iwi)
https://onlinejudge.u-aizu.ac.jp/problems/2260
 提出コードの解答例
 https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
ll f(ll c){
    if(c=='('){
        return ')';
    }
    if(c==')'){
        return '(';
    }
    return c;
}
int main(void){
    string s;
    cin>>s;
    ll ss=s.size(),n=0;
    if(ss&1){
        n=(s[ss/2]!=f(s[ss/2]));
    }
    ll i;
    for(i=0,--ss;i<ss;++i,--ss){
        n+=(s[i]!=f(s[ss]));
    }
    cout<<n<<endl;
    return 0;
}

設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/