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; }

浙公网安备 33010602011771号