cogs 48. [NOIP2007] 字符串的展开
48. [NOIP2007] 字符串的展开
★☆ 输入文件:expand.in 输出文件:expand.out 简单对比
时间限制:1 s 内存限制:128 MB
【问题描述】
在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“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=l表示维持原有顺序,p3=2表示采用逆序输出,注意这时仍然不包括减号两端的字符。例如当p1=l、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只有一行,为展开后的字符串。
【输入输出样例l】
expand.in
1 2 1
abcs-w1234-9s-4zz
expand.out
abcsttuuvvw1234556677889s-4zz
【输入输出样例2】
expand.in
2 3 2
a-d-d
expand.out
aCCCBBBd-d
【输入输出样例3】
expand.in
3 4 2
di-jkstra2-6
expand.out
dijkstra2************6
【限制】
40%的数据满足:字符串长度不超过5
100%的数据满足:l<=pl<=3,l<=p2<=8,1<=p3<=2。字符串长度不超过100
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
char s[],ans[];
int p1,p2,p3,len1,len2;
bool judge(char a,char b){
if(a>='a'&&a<='z'&&b>='a'&&b<='z') return ;
if(a>=''&&b>=''&&a<=''&&b<='') return ;
return ;
}
int main(){
freopen("expand.in","r",stdin);
freopen("expand.out","w",stdout);
scanf("%d%d%d",&p1,&p2,&p3);
cin>>s;len1=strlen(s);
for(int i=;i<len1;i++){
if(s[i]=='-'){
if(s[i-]>=s[i+]||!judge(s[i-],s[i+])){ ans[len2++]=s[i];continue; }
bool f=;
if(s[i-]>=''&&s[i-]<='') f=;
int l=s[i-]-'a',r=s[i+]-'a';
if(p3==){
for(int k=l+;k<=r-;k++){
for(int j=;j<=p2;j++){
if(p1==) ans[len2++]='*';
else if(p1==||f==) ans[len2++]=k+'a';
else if(p1==) ans[len2++]=k+'A'; }
}
}
else if(p3==){
for(int k=r-;k>=l+;k--){
for(int j=;j<=p2;j++){
if(p1==) ans[len2++]='*';
else if(p1==||f==) ans[len2++]=k+'a';
else if(p1==) ans[len2++]=k+'A';
}
}
}
}
else ans[len2++]=s[i];
}
cout<<ans;
}
/*2 2 1
abcs-w1234-7s-azz
*/
cogs 48. [NOIP2007] 字符串的展开的更多相关文章
- [Noip2007] 字符串的展开
题目描述 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母或数 ...
- NOIP2007 字符串展开
.字符串的展开 (expand.pas/c/cpp) [问题描述] 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或“4-8”的子 ...
- [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”的字串,我们就把它当作一种简写,输出时,用连续递增的字母或数 ...
- C语言 · 字符串的展开
算法训练 字符串的展开 时间限制:1.0s 内存限制:256.0MB 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d ...
- noip200706字符串的展开
试题描述: 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母获 ...
随机推荐
- IIS 安装了.net framework 4.0/4.5 却找不到相应应用程序池
通常情况下是因为没注册造成的,有些安装包会自己帮你注册上有些不会,感觉略坑. 注册方法:在计算机中点击 开始菜单–>运行 拷贝以下内容运行一下即可. C:\WINDOWS\Microsoft.N ...
- 怎么学好XXX
怎么学好数据库是一个比较大题目,数据库不仅仅是写SQL那么简单,即使知道了SQL怎么写,还需要很清楚的知道这条SQL他大概扫描了多少数据,返回多少数据,是否需要创建索引.至于SQL优化是一个比较专业的 ...
- Asp.Net 设计模式 之 “特殊”的单例模式
特殊的单例模式 要点在这里,提前预览: public SingleDemo() { name = "yy"; age = 20; //特殊的单例,this指代得失当前的Single ...
- java web 学习笔记 - 表达式语言
1.表达式语言简介 主要为了简化mvc中 jsp的代码量,方便进行属性的输出.还可以避免进行属性为空等的判断,表达式默认将null设置为"". 表达式语言的一个最大的好处就是,只需 ...
- zabbix_sender
转载一个python写的zabbix sender脚本 #!/usr/bin/env python # -*- coding: utf-8 -*- import socket import struc ...
- Objective-C 是动态语言
Objective-C 的动态性是由 runtime 相关的库赋予的. 当然其他语言也完全可以运行在一个 Runtime 库上而获得动态性,由于多数高级语言的诞生都对应着一种编译器,因此将编译器的特性 ...
- CREATE USER - 创建一个新的数据库用户帐户
SYNOPSIS CREATE USER name [ [ WITH ] option [ ... ] ] where option can be: SYSID uid | [ ENCRYPTED | ...
- CREATE TRIGGER - 定义一个新的触发器
SYNOPSIS CREATE TRIGGER name { BEFORE | AFTER } { event [ OR ... ] } ON table [ FOR [ EACH ] { ROW | ...
- vue相关技术
vuejs2.0:渐进式JavaScript框架,易用.灵活.高效,似乎任何规模的应用都适用. element:基于vuejs2.0的ui组件库. vue-router:一般单页面应用spa都要用到的 ...
- ubuntu 普通用户运行virt-manager时libvirt权限设置
error: Failed to connect socket to '/var/run/libvirt/libvirt-sock': Permission deniederror: failed t ...