首页 > 其他分享 >洛谷 P1098 [NOIP2007 提高组] 字符串的展开

洛谷 P1098 [NOIP2007 提高组] 字符串的展开

时间:2023-01-17 17:01:37浏览次数:96  
标签:p3 NOIP2007 洛谷 int p1 P1098

洛谷链接 牛客链接

两个平台都过了

题目:

image

题解:

本题是一道比较硬核的模拟题,思路方面其实问题不大,但是难在模拟情况上面

而且测试数据里还包含了一些题目中没有提到的情况,所以需要多加一些判断,比如 d-4 这种情况不需要展开

#include "bits/stdc++.h"
using namespace std;
int main(){
   int p1,p2,p3;
   char x;
   cin>>p1>>p2>>p3;
   string str;
   cin>>str;
   if(p1==1){
       if(p3==1){
           for(int i=0;i<str.size();i++){
               if(((isalpha(str[i])&&str[i+1]=='-'&& isalpha(str[i+2]))||(isdigit(str[i])&&str[i+1]=='-'&& isdigit(str[i+2])))&&str[i]<str[i+2]){
                   cout<<str[i];
                   x=str[i]+1;
                   for(int j=0;j<str[i+2]-str[i]-1;j++){
               for(int k=0;k<p2;k++)cout<<x;
               x++;
           }
           i++;
       }
               else cout<<str[i];
           }
       }
       else {
           for(int i=0;i<str.size();i++){
               if(((isalpha(str[i])&&str[i+1]=='-'&& isalpha(str[i+2]))||(isdigit(str[i])&&str[i+1]=='-'&& isdigit(str[i+2])))&&str[i]<str[i+2]){
                   cout<<str[i];
                   x=str[i+2]-1;
                   for(int j=0;j<str[i+2]-str[i]-1;j++){
                       for(int k=0;k<p2;k++)cout<<x;
                       x--;
                   }
                   i++;
               }
               else cout<<str[i];
           }
       }
   }

   else if(p1==2){
       if(p3==1){
           for(int i=0;i<str.size();i++){
               if(((isalpha(str[i])&&str[i+1]=='-'&& isalpha(str[i+2]))||(isdigit(str[i])&&str[i+1]=='-'&& isdigit(str[i+2])))&&str[i]<str[i+2]){
                   cout<<str[i];
                   x=str[i]+1;
                   for(int j=0;j<str[i+2]-str[i]-1;j++){
                       for(int k=0;k<p2;k++)cout<<(char)::toupper(x);
                       x++;
                   }
                   i++;
               }
               else cout<<str[i];
           }
       }
       else {
           for(int i=0;i<str.size();i++){
               if(((isalpha(str[i])&&str[i+1]=='-'&& isalpha(str[i+2]))||(isdigit(str[i])&&str[i+1]=='-'&& isdigit(str[i+2])))&&str[i]<str[i+2]){
                   cout<<str[i];
                   x=str[i+2]-1;
                   for(int j=0;j<str[i+2]-str[i]-1;j++){
                       for(int k=0;k<p2;k++)cout<<(char)::toupper(x);
                       x--;
                   }
                   i++;
               }
               else cout<<str[i];
           }
       }
   }

   else if(p1==3){
           for(int i=0;i<str.size();i++){
               if(((isalpha(str[i])&&str[i+1]=='-'&& isalpha(str[i+2]))||(isdigit(str[i])&&str[i+1]=='-'&& isdigit(str[i+2])))&&str[i]<str[i+2]){
                   cout<<str[i];
                   for(int j=0;j<str[i+2]-str[i]-1;j++){
                       for(int k=0;k<p2;k++)cout<<'*';
                   }
                   i++;
               }
               else cout<<str[i];
           }
   }
}

标签:p3,NOIP2007,洛谷,int,p1,P1098
From: https://www.cnblogs.com/ChengMao/p/17058192.html

相关文章

  • 洛谷P1496 火烧赤壁【题解】
    事先声明本题解文字比较多,较为详细,算法为离散化和差分,如会的大佬可以移步去别处看这道题的思路(因为作者比较懒,不想新开两个专题)。题目简要给定每个起火部分的起点和终点......
  • 洛谷 P1036 选数
    原题链接题解:#include"iostream"#include"algorithm"#definelllonglongusingnamespacestd;llsum=0;boolprime(llx){intn=2;for(;x%n!=0;n++)......
  • 洛谷P1157 组合的输出
    原题链接题解:本题有两种办法解决,第一种使用stl中next_permutation函数#include"iostream"#include"algorithm"#include"iomanip"usingnamespacestd;intmai......
  • 洛谷P873 砍树
    洛谷P873砍树原题链接#include"iostream"#include"algorithm"usingnamespacestd;intn,maxx,tree[1000001]={0};boolcheck(intx){longlongsum=0;for......
  • 洛谷 P3600 随机数生成器
    洛谷传送门设\(h_i\)为所有询问最大值\(\lei\)的方案数,则\(ans=\dfrac{\sum\limits_{i=1}^ni\times(h_i-h_{i-1})}{x^n}\)。设\(g_i\)为在\(1\simn\)......
  • 洛谷P7792 KRIZA 题解 C++
    洛谷P7792KRIZA题解C++题目概述:题目传送门Sisyphus在一个圆形的房间里,房间内有n扇锁着的门,他有n把钥匙,其中第i把钥匙对应第$v_i$扇门,遇到不匹配的钥匙就放......
  • P1005 [NOIP2007 提高组] 矩阵取数游戏
    题目传送门前言今天依旧是不写高精的一天呢!(是的,这位作者又只拿了开\(LL\)的\(\color{yellow}{60}\)分)思路描述看到数据\(n,m\le80(30)\)就知道数组可以任性开,......
  • 洛谷 P8077 [WC2022] 序列变换 题解
    题目链接。WC2023之前补一下WC2022的题,参考了官方题解。首先,把括号序列转化为二叉树,\(\texttt{(A)B}\)转为一个点的左子树是\(A\),右子树是\(B\)。相当于括号序列先......
  • 洛谷P1040. 加分二叉树
    题目描述设一个\(n\)个节点的二叉树tree的中序遍历为(\(1,2,3,…,n\)),其中数字\(1,2,3,…,n\)为节点编号。每个节点都有一个分数(均为正整数),记第\(i\)个节点的分数......
  • 洛谷P6599 「EZEC-2」异或【题解】
    题目大意有\(T\)组数据,每组数据给定两个\(l,n\in\mathbb{N*}\),构造一个长为\(l\),每个元素不超过\(n\)的数组令他为\(a\),要使\[\sum_{i=1}^l\sum_{j=1}^{i-1}a_i\oplu......