这道题考试考到的,字符串的展开(2229)

luffy 路飞AFO 2020-07-25 20:09:01 2020-07-25 20:09:40 0

考试的时候也没多想,看到数据大小只有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键盘的孩子 u_738848680,594228667_fm_26_gp_0.jpg

{{ vote && vote.total.up }}