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

洛谷链接 牛客链接

两个平台都过了

题目:

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];
           }
   }
}

posted @ 2023-01-17 16:53  Cheng_Mao  阅读(80)  评论(0)    收藏  举报