社区讨论

#8WA 样例和题解里提及的注意事项都过了

P1098[NOIP 2007 提高组] 字符串的展开参与者 31已保存回复 30

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
30 条
当前快照
1 份
快照标识符
@lzgd9pbc
此快照首次捕获于
2024/08/05 10:22
2 年前
此快照最后确认于
2025/11/20 08:42
4 个月前
查看原帖
CPP
#include<iostream> 
#include<cstdio>
#include<cctype>
#define isnum(p) isalnum(p)&&(!isalpha(p))
using namespace std;
int p1,p2,p3,l;
string s;
void output(char o,int j)
{
    for(int i=0;i<j;i++)putchar(o);
}
void expand(char s,char e)
{
    char t;
    if(isnum(s))
    {
        if(p1==3)
        {
            output('*',(e-s-1)*p2);
        }
        else
        {
            if(p3==1)
                for(t=s+1;t<e;t++)
                    output(t,p2);
            if(p3==2)
                for(t=e-1;t>s;t--)
                    output(t,p2);
        }
    }
    else
    {
        if(p1==3)
        {
            output('*',(e-s-1)*p2);
        }
        else if(p1==1)
        {
            if(p3==1)
                for(t=s+1;t<e;t++)
                    output(t,p2);
            if(p3==2)
                for(t=e-1;t>s;t--)
                    output(t,p2);
        }
        else if(p1==2)
        {
            if(p3==1)
                for(t=s+1;t<e;t++)
                    output(t-32,p2);
            if(p3==2)
                for(t=e-1;t>s;t--)
                    output(t-32,p2);
        }
    }
}
int main()
{
    int i;
    cin>>p1>>p2>>p3>>s;
    l=s.size();
    for(int i=0;i<l;i++)
    {
        bool out=1;
        bool clr=0;
        if(i>0 && i<l-1 && s[i]=='-')
        {
            if(s[i-1]+1==s[i+1])
            {
                clr=1;
            }
            else if(i==1)
            {
                if(isnum(s[i-1])&&isnum(s[i+1]))
                    if(s[i-1]<s[i+1])
                    {
                        expand(s[i-1],s[i+1]);
                        out=0;
                    }
                if(isalpha(s[i-1])&&isalpha(s[i+1]))
                    if(s[i-1]<s[i+1])
                    {
                        expand(s[i-1],s[i+1]);
                        out=0;
                    }
            }
            else
            {
                if(s[i-2]!='#')
                {
                    if(isnum(s[i-1])&&isnum(s[i+1]))
                        if(s[i-1]<s[i+1])
                        {
                            expand(s[i-1],s[i+1]);
                            out=0;
                        }
                    if(isalpha(s[i-1])&&isalpha(s[i+1]))
                        if(s[i-1]<s[i+1])
                        {
                            expand(s[i-1],s[i+1]);
                            out=0;
                        }
                }
    
            }
        }
        if(!clr)
            out?putchar(s[i]):s[i]='#';
    }
}

回复

30 条回复,欢迎继续交流。

正在加载回复...