#587ラウンドCodeforces(DIV。3)A.プレフィックス

リンク:

https://codeforces.com/contest/1216/problem/A

質問の意味:

ニコライは小文字のみラテン文字「a」と「b」で構成されても、長さnの文字列sを、得ました。その位置は、1からnまで番号が付けられています。

彼はさらに長さのすべてのそのプレフィックスは、文字「a」と「b」の同量を持つように彼の文字列を変更したいと考えています。それを達成するために、ニコライは(おそらく、ゼロ)回の次の操作任意の数を実行することができます(つまり、「」と「B」または交換」を交換する彼の文字列内のいくつかの位置を選択し、他の文字でこの位置に手紙を交換A「とB ')。ニコライは、「a」と「b」を除いて何の文字を使用することはできません。

長さl(1≤l≤n)の文字列sの接頭辞は、文字列s [1..l]です。

例えば、文字列s =「アバ」の偶数長さの2つのプレフィックスがあります。最初は、S [1 ... 2] = "AB" と第2のS [1 ... 4] = "アバ" です。それらの両方は、「a」と「b」の同じ番号を持ちます。

あなたの仕事は、ニコライは、偶数の長さのすべてのそのプレフィックスは、文字「a」と「b」の同量を持つようにそれを修正するために、文字列sを実行しなければならない操作の最小数を計算することです。

アイデア:

各文字の最初から異なる2が必要で、ライン上でそれを行います。

コード:

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5+10;

int n;
char s[MAXN];

int main()
{
    cin >> n;
    cin >> s;
    int op = 0, a = 0, b = 0;
    for (int i = 0;i < n;i+=2)
    {
        if (s[i] != s[i+1])
            continue;
        if (s[i] == 'a')
            s[i] = 'b';
        else
            s[i] = 'a';
        op++;
    }
    cout << op << endl;
    cout << s << endl;

    return 0;
}

おすすめ

転載: www.cnblogs.com/YDDDD/p/11622744.html