The 8th Zhejiang Provincial Collegiate Programming Contest / D - String Successor

返回目录

 

悲剧地wa了,不知道哪错,而且代码越改越恶心

不喜勿看=。= ,知道哪错的麻烦告诉我一下O(∩_∩)O...

 未改

#include<cstdio> #include<cstring> using namespace std; inline int Rint() { int x; scanf("%d", &x); return x;} #define MAXN 110 unsigned char s[MAXN]; int n; int m; int isan(int cur) //!! { for(int i=cur; i>=0; i--) if((s[i] >='0' && s[i]<='9') || (s[i]>='A' && s[i]<='z')) return i; return -1; } int add(int pos) ////进位 1 A a == 1 2 3 { unsigned char& a = s[pos]; if(a>='0' && a<='9' ) { if(a == '9') { a='0'; return 1; } else a+=1; } else if(a>='A' && a<='Z') { if(a == 'Z') { a='A'; return 2; } else a+=1; } else { if(a == 'z') { a='a'; return 3;} else a+=1; } return 0; } void makestr(int pos, unsigned char a) { for(int i=m+1; i>=pos+1; i--) //------------'/0' s[i] = s[i-1]; s[pos] = a; m++; } void solve() { int shit=1; //int m = strlen(s)-1; //n-1 for(int i=0; i<n; i++) { // int m = strlen(s)-1; //n-1 int pos; // if(shit && (pos = isan(m))!=-1) //存在a/n if((pos = isan(m))!=-1) //存在a/n { int tt; while(tt = add(pos)) //进位 1 A a == 1 2 3 { int t = isan(pos-1); if(t==-1) //无a/n { if(tt == 1) makestr(pos, '1'); else if(tt == 2) makestr(pos, 'A'); else if(tt == 3) makestr(pos, 'a'); break; //进位完毕 } else pos = t; //找下一个位置 } } else // 无a/n { // shit = 0; s[m]++; //最右 } s[m+1] = '/0'; printf("%s/n", s); //每次输出一次 } } int main() { int t = Rint(); for(int i=0; i<t; i++) { // if(i) printf("/n"); //??? scanf("%s", s); m =strlen((char*)s)-1; n = Rint(); solve(); printf("/n"); } }

 

别人的,ac

直接用c++ string,insert确实比较方便。

#include <iostream> #include <cstdio> #include <algorithm> #include <vector> #include <string> #include <cstdlib> using namespace std; string str; int main(){ int T; int num; int i,j; int mak; int flag; int k; cin>>T; while(T--){ cin>>str>>num; for(i=1;i<=num;i++){ int len=str.size(); flag=1; mak=0; k=0; for(j=len-1;j>=0&&flag;j--){ if(str[j]>='0'&&str[j]<='9') { str[j]+=flag; if(str[j]>'9') str[j]='0'; else flag=0; mak=1; k=j; } else if(str[j]>='a'&&str[j]<='z') { str[j]+=flag; if(str[j]>'z') str[j]='a'; else flag=0; mak=2; k=j; } else if(str[j]>='A'&&str[j]<='Z') { str[j]+=flag; if(str[j]>'Z') str[j]='A'; else flag=0; mak=3; k=j; } } if(flag) { if(mak==0) { str[len-1]++; } else if(mak==1) { string::iterator it; it=str.begin(); str.insert(it+k,'1'); } else if(mak==2) { string::iterator it; it=str.begin(); str.insert(it+k,'a'); } else if(mak==3) { string::iterator it; it=str.begin(); str.insert(it+k,'A'); } } cout<<str<<endl; } cout<<endl; } return 0; }

你可能感兴趣的:(c,String,iterator,insert,stdstring)