A,求一个正多边形有两条边分别平行于X和Y
B:注意到1…0这样的形式最后一定能变为一个0。那么因为要求字典序最小,所以贪心缩一下就行。
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int maxn = 100000 + 5;
int n, s[maxn];
int main()
{
int T;
scanf("%d", &T);
while(T --)
{
scanf("%d", &n);
for(int i = 0; i < n; ++ i) scanf("%1d", &s[i]);
int l = 0, r = 0;
for(int i = 0; i < n; ++ i)
{
if(s[i] == 1) break;
++ l;
}
for(int i = n - 1; i >= 0; -- i)
{
if(s[i] == 0) break;
++ r;
}
if(l + r == n)
{
for(int i = 0; i < l; ++ i) putchar('0');
for(int i = 0; i < r; ++ i) putchar('1');
}
else
{
for(int i = 0; i < l; ++ i) putchar('0');
putchar('0');
for(int i = 0; i < r; ++ i) putchar('1');
}
puts("");
}
return 0;
}