考试的时候也没多想,看到数据大小只有100直接暴力模拟,结果只过了样例就去看下一道题了,结果爆了40分,更要命的是我要是再把数组开大点就能得50分了自闭了Fuck
坑点:
“-”可能出现在第一位、最后一位,直接输出“-”
“-”可能有很多个,不展开eg:a−−ca--ca−−c 变为a−−ca--ca−−c
注意到这些基本就对了
模拟方法&&技巧
首先从 2~len-1 遍历整个字串这是因为坑点1
注:其实打了特判就行,没必要完全按照题解写法
若遍历到“-”,则判断左右是否都为小写字母或数字,若是则按照参数执行即可(坑点2已解决)
具体思路见代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<map>
#include<cmath>
#include<set>
#include<stack>
using namespace std;
//char a[105],b[105];
//string s;
//const int maxn=0x3f;
char a[10000005],s[105];
int main()
{
//freopen("expand.in","r",stdin);
//freopen("expand.out","w",stdout);
int p1,p2,p3;
scanf("%d%d%d",&p1,&p2,&p3);
scanf("%s",&s);
//s[s.size()]=0;
int len=strlen(s);
//cout<<len;
int pd,k=0;
for(int i=0;i<len;i++)
{
if(s[i]=='-')
{
if(i==0 || i==len-1)
{
//嘻嘻代码被和谐了
}
else if(s[i-1]=='-' || s[i+1]=='-')
{
//嘻嘻代码被和谐了
}
else if(s[i+1] <= s[i-1])
{
//嘻嘻代码被和谐了
}
else if(s[i+1]==s[i-1]+1)
{
continue;
}
else if(减号两侧同为小写字母或同为数字)//嘻嘻代码被和谐了
{
if(p1==1 && p3==1)
{
//嘻嘻代码被和谐了
}
else if(p1==2 && p3==1)
{
//注意这里是大写字母!记得-32
//还有记得打关于两端是数字的特判!!!
//嘻嘻代码被和谐了
}
else if(p1==3 && p3==1)
{
//嘻嘻代码被和谐了
}
else if(p1==1 && p3==2)
{
//嘻嘻代码被和谐了
}
else if(p1==2 && p3==2)
{
//嘻嘻代码被和谐了
}
else if(p1==3 && p3==2)
{
//嘻嘻代码被和谐了
}
}
else
{
//嘻嘻代码被和谐了
}
}
else
{
//嘻嘻代码被和谐了
}
}
for(int i=0;i<k;i++)
{
printf("%c",a[i]);//这就不和谐了,是个人都懂
}
return 0;
}
hh,特的教育那些用AC键盘的孩子