Prefix Flip (Easy Version)
題目
This is the easy version of the problem. The difference between the versions is the constraint on n and the required number of operations. You can make hacks only if all versions of the problem are solved.
There are two binary strings a and b of length n (a binary string is a string consisting of symbols 0 and 1). In an operation, you select a prefix of a, and simultaneously invert the bits in the prefix (0 changes to 1 and 1 changes to 0) and reverse the order of the bits in the prefix.
For example, if a=001011 and you select the prefix of length 3, it becomes 011011. Then if you select the entire string, it becomes 001001.
Your task is to transform the string a into b in at most 3n operations. It can be proved that it is always possible.
Input
The first line contains a single integer t (1≤t≤1000) — the number of test cases. Next 3t lines contain descriptions of test cases.
The first line of each test case contains a single integer n (1≤n≤1000) — the length of the binary strings.
The next two lines contain two binary strings a and b of length n.
It is guaranteed that the sum of n across all test cases does not exceed 1000.
Output
For each test case, output an integer k (0≤k≤3n), followed by k integers p1,…,pk (1≤pi≤n). Here k is the number of operations you use and pi is the length of the prefix you flip in the i-th operation.
Example
Input
5
2
01
10
5
01011
11100
2
01
01
10
0110011011
1000110100
1
0
1
Output
3 1 2 1
6 5 2 5 3 1 2
0
9 4 1 2 10 4 1 2 1 5
1 1
Note
In the first test case, we have 01→11→00→10.
In the second test case, we have 01011→00101→11101→01000→10100→00100→11100.
In the third test case, the strings are already the same. Another solution is to flip the prefix of length 2, which will leave a unchanged.
解釋
題意大致為
給出兩個二進位制數
第一個二進位制數通過k次操作,把前ai個字首全部取反並倒序輸出,使得經過操作後的第一個數和第二個數相等
思路:
把第一個數全部弄成0或者1,最多n次
第一個數的最後一位和第二個數的最後一位不一樣,那就第一位數全部取反
第二個數字開始從後往前進行操作
如果發現不一樣的,那進行記錄,最多n次
最多2n+1次
我原本沒想到這個演算法,複雜的操作也可以通過演算法變得很簡單
程式碼
#include<bits/stdc++.h>
using namespace std;
char cb[2][10000];
int qq[10000];
int main()
{
int t;
cin >> t;
while (t--)
{
int n,ans = 0;
int cut = 0;
cin>>n;
cin>>cb[0];
cin>>cb[1];
int pd = 1;
for(int i=0 ; i<n ; i++){
cb[0][i] = cb[0][i] - '0';
cb[1][i] = cb[1][i] - '0';
if(cb[0][i] != cb[1][i])pd = 0;
}
if(pd == 1){
printf("0\n");
}else{
for(int i=1 ; i<n ; i++){
if(cb[0][i] != cb[0][i-1]){
ans++;
qq[cut++] = i;
}
}
if(cb[1][n-1] != cb[0][n-1]){
ans++;
qq[cut++] = n;
}
for(int i=n-2 ; i>=0 ; i--){
if(cb[1][i] != cb[1][i+1]){
ans++;
qq[cut++] = i+1;
}
}
printf("%d ",ans);
for(int i=0 ; i<cut ; i++){
printf("%d ",qq[i]);
}printf("\n");
}
}
return 0;
}
相關文章
- Catch the Mole(Easy Version)
- C# 寫 LeetCode easy #14 Longest Common PrefixC#LeetCode
- CodeForces 1883G1 Dances (Easy version)
- CF 1980 F1 Field Division (easy version) (*1900)
- codeforces 1209E1 Rotate Columns (easy version)
- CF1930D1 - Sum over all Substrings (Easy Version)
- 題解:CF1209E1 Rotate Columns (easy version)
- CF1264D1/2 Beautiful Bracket Sequence (easy/hard version)Racket
- CF 2002 D1. DFS Checker (Easy Version) (*1900)思維
- Flip Game(POJ 1753)GAM
- E - Prefix Equality
- 杭電OJ2029迴文串——Palindromes _easy version(C語言解析)C語言
- CF 1968 G1.Division + LCP (easy version) (*1900) 二分+雜湊
- Natasha, Sasha and the Prefix Sums
- IP-Prefix List
- Views with the Prefix USER (267)View
- Views with the Prefix ALL (268)View
- Views with the Prefix DBA (269)View
- 【持續更新】重要FLIP總結
- What is the N prefix in MSSQL all about?SQL
- 1.Prefix字首和【模板】
- POJ 1753-Flip Game(列舉&&DFS)GAM
- Leetcode Longest Common PrefixLeetCode
- [LeetCode]Longest Common PrefixLeetCode
- CF1458D Flip and Reverse 題解
- 字串魔法(easy)字串
- ACM A problem is easyACM
- 【BUUCTF】easy calc
- 【BUUCTF】Easy JavaJava
- Leetcode 14 Longest Common PrefixLeetCode
- LeetCode- Implement Trie (Prefix Tree)LeetCode
- Leetcode-Longest Common PrefixLeetCode
- Longest Common Prefix leetcode javaLeetCodeJava
- POJ 3106Flip and Turn(模擬)
- 讀<<programming ruby>> 7.6節 flip-flop 理解
- MySQL Version TokensMySql
- 理解Semantic Version
- Easy-Admin