【题外话】这道题纯粹考验耐心,某些经常调程序调到摔键盘的人可以尝试
【题外话2】除了考耐心以外完全没有什么难点
【题外话3】也许会稍微恶心一点?
【题外话4】其实我是在别人军训的时候滚来更博客的简直233333
题目不贴了,NOIP2007原题什么的,然后就是关于某些小细节的处理,比如以‘-’开头啊,以‘-’结尾啊,还有‘--’啊,还有一种题目中提到的,‘-’两边分别是数字和字母,以及关于填充大写字母的时候数字不变什么的。
总体来说其实就是一道字符处理模拟题,稍微细心与耐心一点的都可以10minAC
我已经懒得吐槽自己的代码风格了。
1 #include <algorithm> 2 #include <iostream> 3 #include <fstream> 4 #include <cstdlib> 5 #include <cstring> 6 #include <string> 7 using namespace std; 8 ifstream fin("expand.in"); 9 ofstream fout("expand.out"); 10 string old,nw; 11 int p1=0,p2=0,p3=0; 12 void zx(int wi); 13 void fx(int wi); 14 int main(void) 15 { 16 fin>>p1>>p2>>p3; 17 fin>>old; 18 for(int i=0;i<old.size();i++) 19 { 20 if(old[i]=='-'&&i>=1&&i<old.size()-1) 21 { 22 if(old[i-1]=='-'||old[i+1]=='-') 23 { 24 nw+=old[i]; 25 continue; 26 } 27 if(old[i-1]>=old[i+1]) 28 { 29 nw+=old[i]; 30 continue; 31 } 32 if((old[i-1]>='a'&&old[i-1]<='z')&&(old[i+1]<'a'||old[i+1]>'z')) 33 { 34 nw+=old[i]; 35 continue; 36 } 37 if((old[i+1]>='a'&&old[i+1]<='z')&&(old[i-1]<'a'||old[i-1]>'z')) 38 { 39 nw+=old[i]; 40 continue; 41 } 42 if(p3==1)zx(i); 43 else fx(i); 44 } 45 else nw+=old[i]; 46 } 47 fout<<nw; 48 return 0; 49 } 50 void zx(int wi) 51 { 52 char ja; 53 for(int i=1;i<=(old[wi+1]-old[wi-1])-1;i++) 54 { 55 for(int j=1;j<=p2;j++) 56 { 57 if(p1==1) 58 { 59 ja=old[wi-1]+i; 60 nw+=ja; 61 } 62 if(p1==2&&old[wi+1]>='a'&&old[wi+1]<='z') 63 { 64 ja=old[wi-1]+i; 65 ja-='a'; 66 ja+='A'; 67 nw+=ja; 68 } 69 if(p1==2&&(old[wi+1]<'a'||old[wi+1]>'z')) 70 { 71 ja=old[wi-1]+i; 72 nw+=ja; 73 } 74 if(p1==3) 75 { 76 nw+="*"; 77 } 78 } 79 } 80 return; 81 } 82 void fx(int wi) 83 { 84 char ja; 85 for(int i=1;i<=(old[wi+1]-old[wi-1])-1;i++) 86 { 87 for(int j=1;j<=p2;j++) 88 { 89 if(p1==1) 90 { 91 ja=old[wi+1]-i; 92 nw+=ja; 93 } 94 if(p1==2&&old[wi+1]>='a'&&old[wi+1]<='z') 95 { 96 ja=old[wi+1]-i; 97 ja-='a'; 98 ja+='A'; 99 nw+=ja; 100 } 101 if(p1==2&&(old[wi+1]<'a'||old[wi+1]>'z')) 102 { 103 ja=old[wi+1]-i; 104 nw+=ja; 105 } 106 if(p1==3) 107 { 108 nw+="*"; 109 } 110 } 111 } 112 return; 113 }