社区讨论
#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 条回复,欢迎继续交流。
正在加载回复...