竞赛讨论区 > 题目: 1001 - [NOIP2007] 字符串的展开
头像
想想王会怎么做
编辑于 2023-01-12 23:13 河南
+ 关注

题目: 1001 - [NOIP2007] 字符串的展开

#include<bits/stdc++.h>
using namespace std;
string ans;
int main()
{
	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int p1,p2,p3;
    cin>>p1>>p2>>p3;
    string s;
    cin>>s;
    for(int i = 0;i < s.size();i++)
    {
    	if(s[i]!='-') ans+= s[i];
        else 
        {
            char x = s[i-1],y=s[i+1];
            if(p3==1)
            {
            	if(y>x)
            	{
            		if(y==x+1) continue;
            		else 
            		{
            			int t = y - x -1;
            			if( p1==1)
            			{
            				for(char i = x+1;i < y ;i++ )
            				{
            					for(int j = 1;j <= p2;j++ )
            					{
            						ans+=i;
								}
							}
						}
						 if(p1==2 && x>='a' &&x<='z')
						{
						for(char i = x+1;i < y;i++)
							{
								for(int j = 1;j <= p2;j ++ )
								{
									ans += i;
								}
							}
						}
						if(p1==2 && x>='0' && x<='9')
						{
							for(char i = x+1;i < y;i++ )
							{
								for(int j = 1;j <= p2;j ++ )
								{
									ans += i;
								}
							}
						}
						if(p1==3)
						{
							for(int i = 1;i <= p2*t; i++ )
							ans += '*';
						}
					}
				}
				else ans+=s[i];
			}
			else 
			{
				if(y>x)
            	{
            		if(y==x+1) continue;
            		else 
            		{
            			int t = y - x -1;
            			if( p1==1)
            			{
            				for(char i = x+1;i < y ;i++ )
            				{
            					for(int j = 1;j <= p2;j++ )
            					{
            						ans+=i;
								}
							}
						}
						 if(p1==2 && x>='a' &&x<='z')
						{
						for(char i = y-33;i >= x-31;i--)
							{
								for(int j = 1;j <= p2;j ++ )
								{
									ans += i;
								}
							}
						}
						if(p1==2 && x>='0' && x<='9')
						{
							for(char i = y-1;i > x;i--)
							{
								for(int j = 1;j <= p2;j ++ )
								{
									ans += i;
								}
							}
						}
						if(p1==3)
						{
							for(int i = 1;i <= p2*t; i++ )
							ans += '*';
						}
					}
				}
				else ans += s[i];
			}
			}
 		 }
 		 cout<<ans<<endl;
 		 return 0;
}

我改了几次,3个样例也都过了,感觉我这个代码没问题,但是牛客上只过了40%的数据,有无佬帮忙看一下问题在哪?感谢!

全部评论

(0) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐