1 条题解

  • 0
    @ 2024-4-6 22:52:03

    修正一下题目,p=1p=1 是原序输出,p=2p=2 是逆序输出。

    简单模拟题,按照题目意思模拟即可,但是坑点很多。

    以下默认 si=-s_i = \texttt{-}

    • 对于 p=1p=1,直接枚举 si1+1si+11s_{i-1} + 1 \sim s_{i+1} -1,输出小写字母。
    • 对于 p=2p=2,和 p=1p=1 反一下,输出大写字母。
    • 对于 p=3p=3,输出 *\texttt{*}

    每个字符重复输出 p2p2 次。

    如果 p3=2p3=2,则从 si+11si1+1s_{i+1}-1\sim s_{i-1}+1 倒着枚举。

    srds:

    • -\texttt{-} 符号左、右边一端字母,一端数字,应当输出 -\texttt{-}
    • 如果出现类似于 12345-----\texttt{12345-----} 的数据,输出 -\texttt{-}
    • 如果 s0=-s_0 = \texttt{-},输出 -\texttt{-},譬如:---3-4-3-8\texttt{---3-4-3-8}
    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    #define rep(i,x,y) for(int i=x;i<=y;i++)
    #define rrep(i,x,y) for(int i=x;i>=y;i--)
    #define pr printf
    #define inf 1e9
    #define lowbit(x) x & (-x)
    
    const int N=1e6+10;
    inline int read() {
    	int s = 0, w = 1;
    	char c = getchar();
    	while (!isdigit(c)) {
    		if (c == '-') w = -1;
    		c = getchar();
    	}
    	while (isdigit(c)) {
    		s = (s << 1) + (s << 3) + (c ^ 48);
    		c = getchar();
    	}
    	return s * w;
    }
    
    int p1,p2,p3;
    string s;
    
    inline void small(char x){//转小写或者不转。
      if(isdigit(x)) cout<<x;
      else if(x >= 'A' && x <= 'Z') cout<<char(x+32);
      else cout<<x;
    }
    
    inline void big(char x){//转大写或者不转。
      if(isdigit(x)) cout<<x;
      else if(x >= 'a' && x <= 'z') cout<<char(x-32);
      else cout<<x;
    }
    
    inline void judge(int sr , int ed){
    /* 分情况讨论。*/
      if(p1==1){
      	if(p3==2)
      	  rrep(i,s[ed]-1,s[sr]+1)
      	    rep(j,1,p2) small(char(i));
    	else
    	  rep(i,s[sr]+1,s[ed]-1)
    	    rep(j,1,p2) small(char(i));
      }
      if(p1==2){
      	if(p3==2)
      	  rrep(i,s[ed]-1,s[sr]+1)
      	    rep(j,1,p2) big(char(i));
    	else
    	  rep(i,s[sr]+1,s[ed]-1)
    	    rep(j,1,p2) big(char(i));  	
      }
      if(p1==3) rep(i,s[sr]+1,s[ed]-1) rep(j,1,p2) pr("*");
    }
    
    signed main() {
      p1=read();p2=read();p3=read();
      cin>>s;
      int len=s.size();
      rep(i,0,len-1){
      	if(s[i]!='-') cout<<s[i];
      	else{
      	  if(isdigit(s[i-1])&&isalpha(s[i+1])) pr("-");
      	  else if(isalpha(s[i-1])&&isdigit(s[i+1])) pr("-");
      	  else if(s[i-1]=='-'||s[i+1]=='-') pr("-");
    	  else if(s[i-1] >= s[i+1]) pr("-");
    	  else if(!isalnum(s[i-1])||!isalnum(s[i+1])) pr("-");
          else judge(i-1,i+1);
    	}
      }
      return 0;
    }
    
    • 1

    信息

    ID
    185
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    (无)
    递交数
    180
    已通过
    58
    上传者