题目:http://codeforces.com/contest/550/problem/E
分析:尝试最后两位:
0 1 一定是1
1 0 一定是0
1 1 一定是1
0 0 比较复杂,可以分成:…->(0->(…->0))->0
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int Tmax=100005;
int n;
char data[Tmax];
void work()
{
int p=strchr(data,'0')-data,i;
if(p==n-2) printf("NO");
else{
printf("YES\n");
if(p!=0)
{
printf("%c",data[0]);
for(i=1;i<p;i++) printf("->%c",data[i]);
printf("->");
}
printf("(");
printf("0->(%c",data[p+1]);
for(i=p+2;i<=n-2;i++) printf("->%c",data[i]);
printf("))->0");
}
return;
}
int main()
{
int i;
scanf("%d",&n);getchar();
for(i=0;i<n;i++){
data[i]=getchar();
getchar();
}
if(n==1&&data[0]=='0') printf("YES\n0");
else if(n==1&&data[0]=='1') printf("NO");
else if(n>=2&&((data[n-2]=='0'&&data[n-1]=='1')||(data[n-2]=='1'&&data[n-1]=='1'))) printf("NO");
else if(n>=2&&(data[n-2]=='1'&&data[n-1]=='0')){
printf("YES\n%c",data[0]);
for(i=1;i<n;i++) printf("->%c",data[i]);
}
else work();
return 0;
}