SRM302 div1 medium
ひどいソースだ。
#include <algorithm> #include <string> #include <vector> #include <iostream> #include <sstream> #include <cstdio> typedef long long LL; using namespace std; class IntegerPalindrome { public: LL findByIndex(int K) { LL t[30],u[30]; t[1]=t[2]=9; for(int i=3;i<30;i++) t[i]=t[i-2]*10; u[1]=0; for(int i=2;i<30;i++) u[i]=u[i-1]+t[i-1]; int len; for(len=1;len<30;len++) if(u[len]<=K && K<u[len+1]) break; K-=u[len]; printf("len=%d K=%d\n",len,K); stringstream ss; ss << K; string s1=ss.str(); printf("s1=%s\n",s1.c_str()); if(len%2==0) { if(s1.size()*2<len) s1=string(len/2-s1.size(),'0')+s1; s1[0]+=1; printf("s1=%s\n",s1.c_str()); string s2=s1; reverse(s1.begin(),s1.end()); s2+=s1; printf("s2=%s\n",s2.c_str()); stringstream tt(s2); LL l; tt>>l; return l; } else { if(s1.size()*2-1<len) s1=string(len/2-s1.size()+1,'0')+s1; s1[0]+=1; printf("s1=%s\n",s1.c_str()); string s2=s1; reverse(s1.begin(),s1.end()); s2+=s1.substr(1,s1.size()-1); printf("s2=%s\n",s2.c_str()); stringstream tt(s2); LL l; tt>>l; return l; } return 0; } };