#6 #7 求助!!!

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

这题...真没话说,老复杂了
by GXZJQ @ 2023-12-23 21:46:14


```cpp #include "bits/stdc++.h" using namespace std; int p1, p2, p3; bool isDight(char c) { return c >= '0' && c <= '9'; } bool isZiMu(char c) { return c >= 'a' && c <= 'z'; } char getSmall(char c) { if (c >= 'a' && c <= 'z') return c; return 'a' + (c - 'A'); } char getBig(char c) { if (c >= 'A' && c <= 'Z') return c; return 'A' + (c - 'a'); } string s; int main() { cin >> p1 >> p2 >> p3; cin >> s; for (int i = 0; i < s.size(); i++) { if (s[i] != '-') { cout << s[i]; continue; } if ((isDight(s[i - 1]) && isDight(s[i + 1])) || (isZiMu(s[i - 1]) && isZiMu(s[i + 1]))) { if (s[i - 1] >= s[i + 1]) { cout << s[i]; continue; } char lf = s[i - 1], ri = s[i + 1]; if (p3 == 1) { if (p1 == 1) { if (isZiMu(lf)==1) { lf = getSmall(lf); ri = getSmall(ri); } for (char c = lf + 1; c < ri; c++) { for (int j = 0; j < p2; j++) cout << c ; } } else if (p1 == 2) { if (isZiMu(lf)) { lf = getBig(lf); ri = getBig(ri); } for (char c = lf + 1; c < ri; c++) { for (int j = 0; j < p2; j++) cout << c ; } } else if (p1 == 3) { if (isZiMu(lf)) { lf = getBig(lf); ri = getBig(ri); } for (char c = lf + 1; c < ri; c++) { for (int j = 0; j < p2; j++) cout << '*' ; } } } else if (p3 == 2) { if (p1 == 1) { if (isZiMu(lf)) { lf = getSmall(lf); ri = getSmall(ri); } for (char c = ri - 1; c > lf; c--) { for (int j = 0; j < p2; j++) cout << c ; } } else if (p1 == 2) { if (isZiMu(lf)) { lf = getBig(lf); ri = getBig(ri); } for (char c = ri - 1; c > lf; c--) { for (int j = 0; j < p2; j++) cout << c ; } } else if (p1 == 3) { if (isZiMu(lf)) { lf = getSmall(lf); ri = getSmall(ri); } for (char c = ri - 1; c > lf; c--) { for (int j = 0; j < p2; j++) cout << '*' ; } } } } else cout << s[i]; } return 0; } ```
by GXZJQ @ 2023-12-23 21:47:07


@[GXZJQ](/user/1088732) 你的貌似也很复杂
by ZackofZHOU @ 2023-12-23 22:11:54


[link(但是对我没有用)](https://www.luogu.com.cn/discuss/748847)
by albk_shbgp @ 2023-12-30 22:51:26


``` #include <bits/stdc++.h> using namespace std; int p1,p2,p3; char s[105]; void p31(int l,int r) { for(char x=s[l]+1; x<s[r]; x++) for(int j=1; j<=p2; j++) if(p1==3) { cout<<'*'; } else if(p1==1||(x>='0'&&x<='9')) { cout<<char(x); } else if(p1==2){ cout<<char(x-32); } } void p32(int l,int r ) { for(char x=s[l]-1; x>=s[r]+1; x--) for(int j=0; j<p2; j++)if(p1==3) { cout<<'*'; } else if(p1==1||(x>='0'&&x<='9')) { cout<<char(x); } else if(p1==2){ cout<<char(x-32); } } int main() { cin>>p1>>p2>>p3; cin>>s; int len=strlen(s); cout<<s[0]; for(int i=1; i<len; i++) { if(s[i] == '-'&&s[i-1]<s[i+1]&&i!=len-1&&s[i-1]!='-'&&s[i+1]!='-') { if(s[i-1]>='0'&&s[i-1]<='9'&&(s[i+1]>='A'&&s[i+1]<='Z'||s[i+1]>='a'&&s[i+1]<='z')) { cout<<s[i]; } else if(s[i-1]+1!=s[i+1]){ int c=s[i-1]; if(p3 == 1) p31(i-1,i+1); else if(p3 == 2) p32(i+1,i-1); cout<<s[i+1]; i++; } } else { cout<<s[i]; } } return 0; } ``` 好像我比你们短很多(其实也就短了10几行)
by qusia_MC @ 2024-01-22 16:15:38


@[ZackofZHOU](/user/948216) @[GXZJQ](/user/1088732)
by qusia_MC @ 2024-01-22 16:16:12


|