A - Edit Distance
A binary string is a non-empty sequence of 00's and 11's, e.g., 010110, 1, 11101, etc. The edit distance of two binary strings SS and TT, denoted by edit(S,T)edit(S,T), is the minimum number of single-character edit (insert, delete, or substitute) to modify SSinto TT. For example, the edit distance of 0011 and 1100 is 44, i.e. 0011 →→ 011 →→11 →→ 110 →→ 1100. The edit distance of 1100101 and 1110100 is 22, i.e. 1100101 →→1110101 →→ 1110100.
Ayu has a binary string SS. She wants to find a binary string with the same length as SS that maximizes the edit distance with SS. Formally, she wants to find a binary string TmaxTmax such that |S|=|Tmax||S|=|Tmax| and edit(S,Tmax)≥edit(S,T′)edit(S,Tmax)≥edit(S,T′) for all binary string T′T′ satisfying |S|=|T′||S|=|T′|.
She needs your help! However, since she wants to make your task easier, you are allowed to return any binary string TT with the same length as SS such that the edit distance of SS and TT is more than half the length of SS. Formally, you must return a binary string TT such that |S|=|T||S|=|T| and edit(S,T)>|S|2edit(S,T)>|S|2.
Of course, you can still return TmaxTmax if you want, since it can be proven that edit(S,Tmax)>|S|2edit(S,Tmax)>|S|2 for any binary string SS. This also proves that there exists a solution for any binary string SS. If there is more than one valid solution, you can output any of them.
Input
Input contains a binary string SS (1≤|S|≤20001≤|S|≤2000).
Output
Output in a line a binary string TT with the same length as SS that satisfies edit(S,T)>|S|2edit(S,T)>|S|2.
Examples
Input
0011
Output
1100
Input
1100101
Output
0011010
Note
Explanation for the sample input/output #1
As illustrated in the example above, the edit distance of 0011 and 1100 is 44. Since 4>424>42, 1100 is one of the valid output for this sample.
题意:
给你一个字符串S,请输出一个字符串T,使T与S长度相等的且S到T的编辑距离e>S长度的一半(即 e>ls/2)
思路:
可以先找出S串中0,1的个数。
1)当0、1个数相等时,判断S[0],
如果S[0]为‘0’的话,则将S[0]变为‘1’,之后的字符串中的‘1’都变成’0‘;
如果S[0]为’1‘的话,则将S[0]变为‘0’,之后的字符串中的‘0’都变成‘1’;
这样的话,编辑距离e为S长的一半+1;(一半的‘1’变成‘0’ + 一个‘0’变成‘1’)
2)当0、1个数不等时,判断0、1的个数,
如果0的个数大于1的个数,则将字符串中的‘0’都变成‘1’;
如果1的个数大于0的个数,则将字符串中的‘1’都变成’0‘;
这样的话,因为0、1个数不等,必有一个的个数大于一半的长度,所以改变这个数就可以使编辑距离>ls/2.
题解:
#include<math.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn=2005;
long long n;
char text[maxn];
int main()
{
scanf("%s",text);
int lt=strlen(text);
int x=0,y=0;
for(int i=0; i<lt; i++)
{
if(text[i]=='0')
x++;
else
y++;
}
if(x==y) //
{
if(text[0]=='0')
{
printf("1");
for(int i=0; i<lt-1; i++)
printf("0");
}
if(text[0]=='1')
{
printf("0");
for(int i=0; i<lt-1; i++)
printf("1");
}
printf("\n");
}
else
{
for(int i=0; i<lt; i++)
if(x>y)
{
if(text[i]=='0')
text[i]='1';
}
else
{
if(text[i]=='1')
text[i]='0';
}
printf("%s\n",text);
}
return 0;
}