| 题号 | A | B | C | D | E | F | G | H | I | J | K | L |
| 状态 | Ο | . | . | Ο | . | . | Ø | Ø | Ο | Ο | . | Ο |
Ο:当场
Ø:已补
. : 待补
A. Edit Distance
Thinking:kk pai爷
Code:kk
不能直接反转,比如"010101",直接反转后就变成"101010",右移一位,然后加个0就可以了。
所以要先统计01的数量,如果0大于1,就全变成1,1大于0,就全变成0(从数量上的改变就大于s/2了),相等的话,就看首位是0还是1,取相反,后面和首位不一样就行(位置)。
#include<bits/stdc++.h> #include<tr1/unordered_map> #include<bits/stdc++.h> #define clr(a,b) memset(a,b,sizeof(a)) #define fpn() freopen("simple.in","r",stdin) #define rd read() using namespace std; const int maxn=2010; typedef long long ll; int a,b; char s[maxn]; int main(){ cin>>s+1; int n=strlen(s+1); for(int i=1;i<=n;i++) { if(s[i]=='0')a++; else b++; } if(a>b){ for(int i=1;i<=n;i++) { printf("1"); } puts(""); }else if(a<b){ for(int i=1;i<=n;i++) { printf("0"); } puts(""); }else{ if(s[1]=='1'){ printf("0"); for(int i=2;i<=n;i++) { printf("1"); } puts(""); }else{ printf("1"); for(int i=2;i<=n;i++) { printf("0"); } puts(""); } } }