A1. Prefix Flip (Easy Version)(构造题)

 

 

 

 思路:

转换规则:选择一定的前缀,将字符串中该前缀0变为1,1变为0,然后反转。

题目中说到,给定字符串a和b,保证a一定可以利用规则转变成b,且步数不会超过3n步,由此可以推断出该题可以构造一定的标准化的转换步骤,将a转换成b。

如果a和b相应的下标 i 中字符不一样,则可以将前缀 i 反转,然后反转1,最后再次将前缀 i 反转,可以看出,第 i 个字符反转了3次,字符发生了变化,前 i-1 个字符反转了2次,字符没有发生变化。从而使得在下标 i 中a和b的对应的字符是一样的

代码:

#include <bits/stdc++.h>
using namespace std;
int t, n;
string a, b;
int main(){
    cin >> t;
    while(t--){
        int n; cin >> n;
        cin >> a >> b;
        vector<int> v;
        for(int i=0;i<n;i++){
            if(a[i] != b[i]){
                v.push_back(i + 1);
                v.push_back(1);
                v.push_back(i + 1);
            }
        }
        cout << v.size() << ' ';
        for(int i=0;i<v.size();i++) cout << v[i] << ' ';
        cout << endl;
    }
    return 0;
}

 

posted @ 2022-07-01 17:49  聊服一  阅读(51)  评论(0)    收藏  举报