Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
为什么还WA,测了N组数据都没问题#include<stdio.h> #include<math.h> int fn(long num) { if(num<=9) return num; else if(num<=189) { num-=10; if(num%2==0) return num/20+1; else return (num%20-1)/2%10; } else if(num<=2889) { num-=190; if(num%3==0) return num/300+1; else if((num-1)%3==0) return (num%300-1)/30; else if((num-2)%3==0) return (num%300-2)%30/3; } else if(num<=38889) { num-=2890; if(num%4==0) return num/4000+1; else if((num-1)%4==0) return (num%4000-1)/400; else if((num-2)%4==0) return (num%4000-2)%400/40; else if((num-3)%4==0) return (num%4000-3)%40/4; } else { num-=38890; if(num%5==0) return num/50000+1; else if((num-1)%5==0) return (num%50000-1)/5000; else if((num-2)%5==0) return (num%50000-2)%5000/500; else if((num-3)%5==0) return (num%50000-3)%500/50; else if((num-4)%5==0) return (num%50000-4)%50/5; } } long clj(int a1,unsigned long a,long b,int c) { long low=1,high=b,mid; unsigned long sum,sum1; while(low<=high) { mid=(low+high)/2; if(mid<1000) { sum=(2*a1+c*(mid-1))*mid/2; sum1=(2*a1+c*(mid-2))*(mid-1)/2; } else { sum=((2*a1+c*(mid-1))/2)*mid; sum1=((2*a1+c*(mid-2))/2)*(mid-1); } if(a<=sum&&a>sum1) return (a-sum1-1)%(a1+c*(mid-1))+1; else if(sum>a) high=mid-1; else if(sum<a) low=mid+1; } } int main() { int t,ans; unsigned long n; long num; scanf("%d",&t); while(t--) { scanf("%lu",&n); if(n<=45) num=clj(1,n,9,1); else if(n<=9045) num=clj(11,n-45,90,2); else if(n<=1395495) num=clj(192,n-9045,900,3); else if(n<=189414495) num=clj(2893,n-1395495,9000,4); else num=clj(38894,n-189414495,90000,5); ans=fn(num); printf("%d\n",ans); } } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator