首页 > 其他分享 >P1098 [NOIP2007 提高组] 字符串的展开(总结)

P1098 [NOIP2007 提高组] 字符串的展开(总结)

时间:2023-11-17 19:44:19浏览次数:46  
标签:p3 NOIP2007 int 字符串 include P1098

P1098 [NOIP2007 提高组] 字符串的展开http://ww.luogu.com.cn/problem/P1098

注意

字符中的数字是默认小于字母的。
所以要对数字做特判。

#include <iostream>
#include <string>
using namespace std;
int main() {
	int p1, p2, p3;
	cin >> p1 >> p2 >> p3;
	string s;
	cin >> s;
	char start, stop;
	for (int i = 0; i < s.length(); i++) {
		cout << s[i];
		if (s[i + 1] == '-') {
			if ((s[i] < s[i + 2] - 1 && '0' <= s[i] && s[i] <= '9' && '0' <= s[i] && s[i + 2] <= '9') || (s[i] < s[i + 2] - 1
			        && 'a' <= s[i] && s[i] <= 'z'
			        && 'a' <= s[i + 2] && s[i + 2] <= 'z')) {
				if (p1 == 1) {
					if (p3 == 1) {
						start = s[i] + 1;
						stop = s[i + 2] - 1;
						while (start <= stop) {
							for (int j = 1; j <= p2; j++) {
								cout << start;
							}
							start++;
						}
						i++;
					} else {
						start = s[i] + 1;
						stop = s[i + 2] - 1;
						while (start <= stop) {
							for (int j = 1; j <= p2; j++) {
								cout << stop;
							}
							stop--;
						}
						i++;
					}
				} else if (p1 == 2) {
					if (s[i] < 'a') {
						if (p3 == 1) {
							start = s[i] + 1;
							stop = s[i + 2] - 1;
							while (start <= stop) {
								for (int j = 1; j <= p2; j++) {
									cout << start;
								}
								start++;
							}
							i++;
						} else {
							start = s[i] + 1;
							stop = s[i + 2] - 1;
							while (start <= stop) {
								for (int j = 1; j <= p2; j++) {
									cout << stop;
								}
								stop--;
							}
							i++;
						}
					} else {
						if (p3 == 1) {
							start = s[i] - 'a' + 'A' + 1;
							stop = s[i + 2] - 'a' + 'A' - 1;
							while (start <= stop) {
								for (int j = 1; j <= p2; j++) {
									cout << start;
								}
								start++;
							}
							i++;
						} else {
							start = s[i] - 'a' + 'A' + 1;
							stop = s[i + 2] - 'a' + 'A' - 1;
							while (start <= stop) {
								for (int j = 1; j <= p2; j++) {
									cout << stop;
								}
								stop--;
							}
							i++;
						}
					}
				} else {
					if (p3 == 1) {
						start = s[i] + 1;
						stop = s[i + 2] - 1;
						while (start <= stop) {
							for (int j = 1; j <= p2; j++) {
								cout << '*';
							}
							start++;
						}
						i++;
					} else {
						start = s[i] + 1;
						stop = s[i + 2] - 1;
						while (start <= stop) {
							for (int j = 1; j <= p2; j++) {
								cout << '*';
							}
							stop--;
						}
						i++;
					}
				}
			} else if (s[i] == s[i + 2] - 1 ) {
				i++;
			}
		}
	}
}

标签:p3,NOIP2007,int,字符串,include,P1098
From: https://www.cnblogs.com/sdlypsck/p/17839537.html

相关文章

  • 无涯教程-D语言 - 字符串(Strings)
    字符数组我们可以用以下两种形式来表示字符数组.第一种形式直接提供大小,第二种形式使用dup方法创建字符串"Goodmorning"。char[9]greeting1="Hellolearnfk";char[]greeting2="Goodmorning".dup;这是使用上述简单字符数组形式的简单示例。importstd.stdio;voidm......
  • 电脑网站支付报错“验签出错,建议检查签名字符串或私钥与应用公钥是否匹配”问题解决记
    在对接支付宝电脑网站支付的时候,遇到如下报错:“错误代码invalid-signature错误原因:验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配”。但展示的报错内容跟实际原因有所出入(在下文中有解答),这里记录下问题的解决排查过程。问题复现在对接电脑网站支付时,生成form表单......
  • 来自 szc 的字符串和搜索的总结
    膜拜szc大佬。原链接。题单+代码哈希普通哈希不讲了,讲讲树哈希。对于判断一对同构树,要考虑相同结构的儿子在两类树的不同位置。此时有两种方法,一种是正常的按序哈希,我们很好想到在哈希时对儿子节点的哈希值进行排序,规定一个顺序塞进去。另一种方法则是不使用多项式哈希,对......
  • 151. 反转字符串中的单词
    2023-11-17思路:调用库函数+利用正则表达式利用栈双端队列头插链表利用数组总长度不知道按最大长度10^4利用list进阶:字符串可变时,Java不行,双指针,先整体反转,再逐个反转单词可以将空间复杂度降低 数组:classSolution{publicStringreverseWor......
  • 7-5 字符串排序
    目录目录目录题目代码思路第一次错误尝试错误原因正确代码运行结果关于二维数组的函数引用题目本题要求编写程序,读入5个字符串,按由小到大的顺序输出。输入格式:输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。输出格式:按照以下......
  • 字符串哈希算法
    一、字符串哈希:将一串字符串映射成一个整数,并用它来代替字符串进行比较。这样俩个字符串的比较就变成俩个整数的比较,可以将时间复杂度减少至O(1)二、哈希函数:为了将字符串转化为整数,需要一个哈希函数hash,使得以下条件成立:如果字符串s==t那么hash(s)==hash(t)。一般情况下采......
  • 求删除k个字母后的最小字典序字符串
    对于一个字符串来说我们要找删除k个字母后的最小字典序字符串来说,我们肯定是从前往后来删除,如果遇见前一个字母比后一个字母(字典序)大,那就删除前一个。对于此来说我们用一个vector来维护,vector就是存的答案,如果vector的最后一个字母比枚举的字母大,那就删除最后一个。vector<c......
  • 找出一个字符串中出现次数最多的一个字符 找出重复签到的同学
    7-2找出一个字符串中出现次数最多的一个字符找出一个字符串中出现次数最多的一个字符。输入格式:给出一个字符串,字符串的长度不大于10^6,不区分大小写,字符串中可能包含'A'-'Z','a'-'z',''字符。输出格式:分别输出出现最多次数的字符(如果为字母,输出小写字母),出现的次数,用......
  • 344. 反转字符串
    2023-11-16344.反转字符串-力扣(LeetCode)思路:        //栈    //头插链表    //o1 双指针双指针:classSolution{publicvoidreverseString(char[]s){//栈//头插链表//o1双指针inti=0;......
  • [左神面试指南] 字符串[上]篇
    CD95判断两个字符串是否互为变形词/*模拟*/publicclassCD95_1{publicstaticbooleansolution(Strings1,Strings2){if(s1.length()!=s2.length())returnfalse;int[]temp=newint[256];for(charch:s1.toCharArray())......