P1098 字符串的展开

题目描述

在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母或数字串替代其中的减号,即,将上面两个子串分别输出为“defgh”和“45678”。在本题中,我们通过增加一些参数的设置,使字符串的展开更为灵活。具体约定如下:

(1) 遇到下面的情况需要做字符串的展开:在输入的字符串中,出现了减号“-”,减号两侧同为小写字母或同为数字,且按照ASCII码的顺序,减号右边的字符严格大于左边的字符。

(2) 参数p1:展开方式。p1=1时,对于字母子串,填充小写字母;p1=2时,对于字母子串,填充大写字母。这两种情况下数字子串的填充方式相同。p1=3时,不论是字母子串还是数字字串,都用与要填充的字母个数相同的星号“*”来填充。

(3) 参数p2:填充字符的重复个数。p2=k表示同一个字符要连续填充k个。例如,当p2=3时,子串“d-h”应扩展为“deeefffgggh”。减号两边的字符不变。

(4) 参数p3:是否改为逆序:p3=1表示维持原来顺序,p3=2表示采用逆序输出,注意这时候仍然不包括减号两端的字符。例如当p1=1、p2=2、p3=2时,子串“d-h”应扩展为“dggffeeh”。

(5) 如果减号右边的字符恰好是左边字符的后继,只删除中间的减号,例如:“d-e”应输出为“de”,“3-4”应输出为“34”。如果减号右边的字符按照ASCII码的顺序小于或等于左边字符,输出时,要保留中间的减号,例如:“d-d”应输出为“d-d”,“3-1”应输出为“3-1”。

输入输出格式

输入格式:

输入文件expand.in包括两行:

第1行为用空格隔开的3个正整数,依次表示参数p1,p2,p3。

第2行为一行字符串,仅由数字、小写字母和减号“-”组成。行首和行末均无空格。

输出格式:

输出文件expand.out只有一行,为展开后的字符串。

输入输出样例

输入样例#1:

1 2 1
abcs-w1234-9s-4zz

输出样例#1:

abcsttuuvvw1234556677889s-4zz

输入样例#2:

2 3 2
a-d-d

输出样例#2:

aCCCBBBd-d

说明

40%的数据满足:字符串长度不超过5

100%的数据满足:1<=p1<=3,1<=p2<=8,1<=p3<=2。字符串长度不超过100

NOIP 2007 提高第二题

一个·大模拟、、

第一遍60分、、

1.忘记-前面的数一定要比后面的数小这件事了、、、

2.在当前字符为-时,一定还要注意一种情况即为这个-在最前面,这种情况我们直接把这个字符输出

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 1010
using namespace std;
char ch[N];
int p1,p2,p3,x,y;
char a[27]={0,'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
char A[27]={0,'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
int read()
{int x=0,f=1; char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();return x*f;
}
int pd(char ch)
{if(ch>='0'&&ch<='9') return 1;if(ch>='A'&&ch<='Z') return 2;if(ch>='a'&&ch<='z') return 3;return 0;
}
int main()
{p1=read(),p2=read(),p3=read();cin>>ch;int l=strlen(ch);for(int i=0;i<l;i++){if(ch[i]!='-') {cout<<ch[i];continue;}if(ch[i]=='-') {if(pd(ch[i-1])!=pd(ch[i+1])||ch[i-1]>=ch[i+1]||i==0)cout<<ch[i]; else {if(pd(ch[i-1])==1) {x=ch[i-1]-'0'+1,y=ch[i+1]-'1';if(p1==3)for(int j=x;j<=y;j++)for(int k=1;k<=p2;k++) cout<<"*";else{if(p3==1)for(int j=x;j<=y;j++)for(int k=1;k<=p2;k++)cout<<j;else for(int j=y;j>=x;j--)for(int k=1;k<=p2;k++)cout<<j;}}else{if(pd(ch[i-1])==2) x=ch[i-1]-'A'+2,y=ch[i+1]-'A';if(pd(ch[i-1])==3) x=ch[i-1]-'a'+2,y=ch[i+1]-'a';if(p1==3)for(int j=x;j<=y;j++)for(int k=1;k<=p2;k++) cout<<"*";else{if(p3==1){if(p1==1)for(int j=x;j<=y;j++)for(int k=1;k<=p2;k++)cout<<a[j];else for(int j=x;j<=y;j++)for(int k=1;k<=p2;k++)cout<<A[j];}else {if(p1==1)for(int j=y;j>=x;j--)for(int k=1;k<=p2;k++)cout<<a[j];else for(int j=y;j>=x;j--)for(int k=1;k<=p2;k++)cout<<A[j];} }}}}}return 0;
}

转载于:https://www.cnblogs.com/z360/p/7688523.html

洛谷——P1098 字符串的展开相关推荐

  1. 洛谷 P1098 字符串的展开

    洛谷 P1098 字符串的展开 传送门 I'm here! 思路 大暴力字符串题 这个题让我们展开一个字符串\(某字符-某字符\),并且有三个参数对应几种不同的输出方式,首先想到打暴力,因为串特别小, ...

  2. 洛谷P1098 字符串的展开【字符串】【模拟】

    题目描述 在初赛普及组的"阅读程序写结果"的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于"d-h"或者"4-8" ...

  3. 信息学奥赛一本通 1848:【07NOIP提高组】字符串的展开 | OpenJudge NOI 1.7 35:字符串的展开 | 洛谷 P1098 [NOIP2007 提高组] 字符串的展开

    [题目链接] ybt 1848:[07NOIP提高组]字符串的展开 OpenJudge NOI 1.7 35:字符串的展开 洛谷 P1098 [NOIP2007 提高组] 字符串的展开 [题目考点] ...

  4. 字符串的展开(洛谷-P1098)

    题目描述 在初赛普及组的"阅读程序写结果"的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于"d-h"或者"4-8" ...

  5. 洛谷·[SCOI2003]字符串折叠

    初见安~这里是传送门:洛谷 P4302 题目描述 折叠的定义如下: 一个字符串可以看成它自身的折叠.记作S = S X(S)是X(X>1)个S连接在一起的串的折叠.记作X(S) = SSSS-S ...

  6. 字符串的展开(洛谷P1098题题解,Java语言描述)

    题目要求 P1098题目链接 分析 这题最令我崩溃的是各种特殊情况,特别是结尾部分的处理. p1.p2.p3 的操作要处理好,但真正恶心的就是如何判断是可以处理的. 数值和字母不能补全 两边相同的数字 ...

  7. 洛谷精选 - 字符串合集

    https://www.luogu.org/problemnew/lists?name=&orderitem=difficulty&tag=2&content=0&se ...

  8. 字符串——垂直柱状图(洛谷 P1598)

    题目选自洛谷P1598 字符串的题确实够刁钻,有的明明思路很简单,但是写起来就很复杂. 这道题难点在于如何输出"柱状图". 用二维数组来存放每一行的结果再挨个输出吗? 显然这不太行 ...

  9. 2021寒假——洛谷刷题计划(35题)

    (希望大家不要Copy) AC:Accept,程序通过. CE:Compile Error,编译错误. PC:Partially Correct,部分正确. WA:Wrong Answer,答案错误. ...

最新文章

  1. CentOS 6 安装极点五笔拼音输入法
  2. 【每周CV论文】初学GAN图像风格化必须要读的文章
  3. 树莓派c语言led,用树莓派实现RGB LED的颜色控制——C语言版本号
  4. 模板载入与模板继承的区别
  5. Node 即学即用 笔记 思维导图
  6. git commit 规范指南
  7. BlackBerry App之Hello World
  8. c语言规范标准c99中文版下载,c99标准找到了,中文HTML页面
  9. 《高级无线网络—4G技术》——2.3 正交频分复用
  10. Scrapy基础(八)————图片下载后将本地路径添加到Item中
  11. BT种子文件(.torrent)的具体文件结构
  12. 用计算机刻盘,用电脑可以刻录光盘吗?
  13. ios14描述文件无法与服务器连接,苹果手机的信任在哪里设置(ios14描述文件与设备管理)...
  14. 美图秀秀各插件适用场景
  15. java实现shapefile文件的解析
  16. ABP VNext学习日记14
  17. java8新特性总结——lambda表达式
  18. Jenkins针对不同的项目视图对不同的用户进行权限分配
  19. Pandas 函数方法汇总一览查询(持续补充改进)
  20. Codeforces 545 C Woodcutters(贪心/DP)

热门文章

  1. ADMT3.2迁移域用户
  2. Android--应用开发3(Android layout XML属性)
  3. 转:Facebook是如何发布代码的
  4. 程序员的比较工具大杂烩
  5. 【Axure原型图】—— 4. Tab Control(选项卡)
  6. Centos7单端口单配置文件多IP
  7. nginx日志模块及日志格式
  8. js 排列 组合 的一个简单例子
  9. Java MVC框架性能比较 jsp、struts1、struts2、springmvc3 (转帖)
  10. winrar目录穿越漏洞(更新经验)