题意:给你一个字符串,让你变为:数字+(×)+数字+(×)数字……
数字不能有前导零,开头或结尾不能有运算符
思路:先*0?-->*0+
+0?-->+0+
?0-->+0
其余?变为1
再判断是否有前导零、运算符相邻、开头或结尾有运算符的情况
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6+5;
const ll mod = 1e9+7;
const ll INF = 0x3f3f3f3f;
char s[N];
int l;
int check()
{
for(int i=1;i<l;i++)
{
if((s[i]=='+'||s[i]=='*')&&(s[i+1]=='+'||s[i+1]=='*'))
return 0;
if(s[i]=='0'&&(s[i+1]>='0'&&s[i+1]<='9')&&!(s[i-1]>='0'&&s[i-1]<='9'))
return 0;
if(s[1]=='+'||s[1]=='*'||s[l]=='+'||s[l]=='*')
return 0;
}
return 1;
}
int main()
{
int t,i,j;
scanf("%d",&t);
while(t--)
{
scanf(" %s",s+1);
l=strlen(s+1);
// 0?-->0+
// *0?-->*0+
// +0+-->+0+
for(i=1;i<=l;i++)
{
if(s[i]=='0'&&!(s[i-1]>='0'&&s[i-1]<='9')&&s[i+1]=='?')
s[i+1]='+';
else if(s[i]=='?')
s[i]='1';
}
if(check())
puts(s+1);
else
puts("IMPOSSIBLE");
}
return 0;
}