NOIP2007 字符串展开
.字符串的展开
(expand.pas/c/cpp)
【问题描述】
在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“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】
|
expand.in |
expand.out |
|
1 2 1 abcs-w1234-9s-4zz |
abcsttuuvvw1234556677889s-4zz |
【输入输出样例2】
|
expand.in |
expand.out |
|
2 3 2 a-d-d |
aCCCBBBd-d |
【输入输出样例3】
|
expand.in |
expand.out |
|
3 4 2 di-jkstra2-6 |
dijkstra2************6 |
【限制】
40%的数据满足:字符串长度不超过 5
100%的数据满足:1<=p1<=3, 1<=p2<=8, 1<=p3<=2。字符串长度不超过 100
【思路】
这个题很容易忽略一些情况。例如:
1/ ‘-‘出现在开头结尾
2/ 多个‘-‘相连
3/ 数字与字母之间的’-‘
注意这几个问题程序就很明了了。如果不满足展开要求则保留’-‘。
【代码】
#include<iostream>
#include<cstring>
using namespace std; string s;
int p1,p2,p3; int main() {
ios::sync_with_stdio(false);
cin>>p1>>p2>>p3;
cin>>s;
int n=s.size();
int i=;
while(s[i]=='-') { cout<<'-'; i++; }
while(i!=n) {
char c=s[i];
if(c!='-') cout<<c;
else if(i!=) { //注意1 -在开头 -在结尾
c=s[i-]; //取前一个char
char c2=s[i+]; //c2待到下次循环操作 //对于'-'只输出'-'所包含的两端点不处理
if(c>=c2 || isdigit(c)&&isalpha(c2) || (c=='-')||(c2=='-')) cout<<'-';
else if(!(c==c2 || c+==c2)) { //(5)
if(p3==) { //(4)
for(char j=c+;j<c2;j++) for(int k=;k<=p2;k++) { //(4)
if(p1==) cout<<'*'; //(2)
else {
if(isdigit(c2)) cout<<j;
else { char ch=j; if(p1==) ch=ch-'a'+'A'; cout<<ch; } //另赋一值 //-'a'+'A'
}
}
}
else {
for(char j=c2-;j>c;j--) for(int k=;k<=p2;k++) {
if(p1==) cout<<'*';
else {
if(isdigit(c2)) cout<<j;
else { char ch=j; if(p1==) ch=ch-'a'+'A'; cout<<ch; }
}
}
}
}
}
++i;
}
return ;
}
NOIP2007 字符串展开的更多相关文章
- 【NOIP2007】字符串展开解题报告
描述 Description 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或“4-8”的子串,我们就把它当作一种简写,输出时,用 ...
- cogs 48. [NOIP2007] 字符串的展开
48. [NOIP2007] 字符串的展开 ★☆ 输入文件:expand.in 输出文件:expand.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] 在初赛普 ...
- [Noip2007] 字符串的展开
题目描述 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母或数 ...
- 【NOIP2007提高组】字符串展开
[题外话]这道题纯粹考验耐心,某些经常调程序调到摔键盘的人可以尝试 [题外话2]除了考耐心以外完全没有什么难点 [题外话3]也许会稍微恶心一点? [题外话4]其实我是在别人军训的时候滚来更博客的简直2 ...
- [NOIP2007] 提高组 洛谷P1098 字符串的展开
题目描述 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母获数 ...
- AC日记——字符串的展开 openjudge 1.7 35
35:字符串的展开 总时间限制: 1000ms 内存限制: 65536kB 描述 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h ...
- TYVJ P1053 字符串的展开 Label:字符 水
背景 NOIP2007年提高组第2道 描述 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或“4-8”的子串,我们就把它当作一种简 ...
- Luogu 1098 - 字符串的展开 - [字符串操作][模拟]
题目链接:https://www.luogu.org/problemnew/show/P1098 题目描述在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中 ...
- 洛谷P1098 字符串的展开【字符串】【模拟】
题目描述 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母或数 ...
随机推荐
- DX 的.x 文件
template Header { <3D82AB43-62DA-11cf-AB39-0020AF71E433> WORD major; WORD minor; DWORD flags;} ...
- hdu 1561
有依赖的背包,用树形dp解 #include<iostream> #include<cstdio> #include<cstring> #include<al ...
- Unity寻路的功能总结
源地址:http://blog.csdn.net/sgnyyy/article/details/21878163 1. 利用Unity本身自带的NavMesh 这篇文章已经比较详细,可能对于很多需要a ...
- AlphaGo 已经战胜了李世石,而你还不知道什么是机器学习?
谷歌人工智能 AlphaGo 与韩国棋手李世石 3 月 15 日进行了最后一场较量,最终比赛结果为 AlphaGo 4:1 胜李世石,人机围棋大战巅峰对决至此落幕.我不知道大家有没有被震撼到,反正我的 ...
- C++11多线程教学(二)
C++11多线程教学II 从我最近发布的C++11线程教学文章里,我们已经知道C++11线程写法与POSIX的pthreads写法相比,更为简洁.只需很少几个简单概念,我们就能搭建相当复杂的处理图片程 ...
- POJ3282+模拟
模拟题 /* 模拟 注意:相同一边的车有先后顺序! */ #include<stdio.h> #include<string.h> #include<stdlib.h&g ...
- eclipse实现JavaWeb应用增量打包
很多情况下,项目是不允许全量发布的,所以你得把有做修改的文件一个个挑出来,如果有成千上百的文件,你是不是要头大了? 以下方法应该可以让你得到解救!前提是你是用装有svn plugin的eclipse上 ...
- Maven中聚合与继承
何为继承? --继承为了消除重复,我们把很多相同的配置提取出来 --例如:grouptId,version等 就像写java程序一样,对于有共性切重复的东西,就提取出来. 如有三个pom.xml配 ...
- Eclipse反编译工具Jad及插件JadClipse配置(转)
Eclipse反编译工具Jad及插件JadClipse配置 Jad是一个Java的一个反编译工具,是用命令行执行,和通常JDK自带的java,javac命令是一样的.不过因为是控制台运行,所以用起来不 ...
- CGI/FASTCGI/ISAPI区别
一 CGI原理及其性能 1) CGI概念CGI即通用网关接口(Common Gateway Interface),它是一段程序,运行在服务器上,提供同客户端HTML页面的交互,通俗的讲CGI就象是一座 ...