首页 > 其他分享 >洛谷题单指南-模拟和高精度-P1098 [NOIP2007 提高组] 字符串的展开

洛谷题单指南-模拟和高精度-P1098 [NOIP2007 提高组] 字符串的展开

时间:2024-01-19 15:56:30浏览次数:26  
标签:NOIP2007 end 填充 int 洛谷题 start && line P1098

原题链接:https://www.luogu.com.cn/problem/P1098

题意解读:

题目本身是一道模拟题,但是细节点较多,要拿100分,有以下注意点:

1、-号两个需要同时为小写字母或者数字,才进行填充

2、-号左边>=右边,直接输出-

3、对待填充的内容的处理,可以先看是否填充*;小写字母和数字的填充都是前一位ascii加1,而大写字母填充还要减去32

4、逆序的处理,可以将待填充的内容累加到字符串string,然后用reverse()函数对string进行逆序

100分代码:

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int p1, p2, p3;
    cin >> p1 >> p2 >> p3;

    string line;
    cin >> line;

    for(int i = 0; i < line.size(); i++)
    {
        if(line[i] != '-') cout << line[i];
        else 
        {
            char start = line[i - 1]; //取-左边
            char end = line[i + 1]; //取-右边

            if(start >= 'a' && start <= 'z' && end >= 'a' && end <= 'z' ||
               start >= '0' && start <= '9' && end >= '0' && end <= '9') //-两边同为字母或者数字时
               {
                    if(start >= end) cout << "-"; //左边>=右边,直接输出-
                    else
                    {
                        string fill = ""; // 待填充的字符串内容
                        for(int j = start + 1; j < end; j++) //填充范围
                        {
                            for(int k = 1; k <= p2; k++) //填充次数
                            {
                                if(p1 == 3) fill += "*"; //如果p1=3填充*
                                else 
                                {
                                    int t = j; //要填充的内容
                                    if(start >= 'a' && start <= 'z' && p1 == 2) t -= 32; //填充大写字母
                                    fill += t; //p1是1、2填充相应的内容
                                }
                            }
                        }
                        if(p3 == 2)  reverse(fill.begin(), fill.end()); //逆序
                        cout << fill;
                    }
               }
               else cout << "-";
                
        }
    }
}

 

标签:NOIP2007,end,填充,int,洛谷题,start,&&,line,P1098
From: https://www.cnblogs.com/jcwy/p/17974838

相关文章

  • 洛谷题单指南-模拟和高精度-P1067 [NOIP2009 普及组] 多项式输出
    原题链接:https://www.luogu.com.cn/problem/P1067题意解读:模拟法依次输出多项式内容即可,但是需要考虑的周全,主要有以下关键点:1、系数为0时不输出多项式2、第一个符号,只有负号才输出3、次数不为0时,不输出为1的系数;次数为0时,输出所有系数4、次数为1时,不输出次数;次数为0时不输......
  • 洛谷题单指南-模拟和高精度-P1518 [USACO2.4] 两只塔姆沃斯牛 The Tamworth Two
    原题链接:https://www.luogu.com.cn/problem/solution/P1518题意解读:此题是一道模拟题,关键要解决几个问题:1、如何转换方向2、如何在地图中移动3、如何判断无法抓住牛。解题思路:定义chara[10][10]用于存储地图,cx,cy和fx,fy分别代表牛、Farmer所在的位置,cdir、fdir分别代表牛......
  • [NOIP2007 普及组] 守望者的逃离
    [NOIP2007普及组]守望者的逃离题目背景NOIP2007普及组T3题目描述恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变。守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上。为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会沉下去。到那时,岛......
  • 洛谷题单指南-模拟和高精度-P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布
    原题链接:https://www.luogu.com.cn/problem/P1328题意解读:非常简单的一道题,核心考点就是循环数组以及评分规则的构建。评分规则:甲vs乙,1表示甲赢,-1表示甲输,-0表示平转化为数组:intrule[5][5]={0,-1,1,1,-1,1,0,-1,1,-1,-1,1,0,-1,1,-1,......
  • 洛谷题单指南-模拟和高精度-P4924 [1007] 魔法少女小Scarlet
    原题链接:https://www.luogu.com.cn/problem/P4924题意解读:根据题意,通过模拟法,枚举每一个要旋转的矩阵,执行旋转操作即可,关键点在于如何进行矩阵旋转。设定矩阵inta[][],临时矩阵intt[][]用于保存旋转后的矩阵,矩阵长度为len。先考虑要旋转的区域左上角是a[0][0]的情况,区域内每......
  • 洛谷题单指南-模拟和高精度-P1601 A+B Problem
    原题链接:https://www.luogu.com.cn/problem/P1601题意解读:本题是高精度加法的模版题。知识点解析:  高精度加法:  如果一个数大到远超过整形变量的范围时,就不能使用int、long、longlong等变量来存储整数,也不能直接通过变量加法来求和。  因此,需要回到加法计算的本质,从个......
  • 洛谷题单指南-模拟和高精度-P1563 [NOIP2016 提高组] 玩具谜题
    原题链接:https://www.luogu.com.cn/problem/P1563题意解读:本题关键在于根据小人的朝向和寻找的方向来确定数组下标的变化。用数组存储小人,intd[]存朝向,inta[]存名称,朝向和寻找方向有4种组合:朝向(0:向内,1:向外)  寻找方向(0:左,1:右)  数组下标操作00顺时针寻找,下标递减......
  • 洛谷题单指南-模拟和高精度-P1042 [NOIP2003 普及组] 乒乓球
    原题链接:https://www.luogu.com.cn/problem/P1042题意解读:分别针对11分制和21分制,输出每局比分。只需要判断一局的结束条件:得分高者如果达到11或者21,且比分间隔大于等于2分,则表示一局结束,可开始下一局,用模拟法即可解决。100分代码:#include<bits/stdc++.h>usingnamespaces......
  • 【洛谷 P1093】[NOIP2007 普及组] 奖学金 题解(结构体排序)
    [NOIP2007普及组]奖学金题目描述某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前名学生发奖学金。期末,每个学生都有门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规......
  • P1098 [NOIP2007 提高组] 字符串的展开(总结)
    P1098[NOIP2007提高组]字符串的展开http://ww.luogu.com.cn/problem/P1098注意字符中的数字是默认小于字母的。所以要对数字做特判。#include<iostream>#include<string>usingnamespacestd;intmain(){ intp1,p2,p3; cin>>p1>>p2>>p3; strings; cin......