| ||||||||||
| 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 | |||||||||
搞清楚了,对输入排序以后输出应该恢复原顺序这个事情我给忘了……自问自答,我有罪……In Reply To:搞不清楚我这段代码哪里会WA,请教 Posted by:Gerhut at 2006-09-14 20:59:37 > #include <cstdio>
> #include <cstring>
> using namespace std;
>
> int log10(int n)
> {
> if(n<10)return 0;
> if(n<100)return 1;
> if(n<1000)return 2;
> if(n<10000)return 3;
> return 4;
> }
> int pow10(int n)
> {
> if(n==0)return 1;
> if(n==1)return 10;
> if(n==2)return 100;
> if(n==3)return 1000;
> if(n==4)return 10000;
> }
>
> long width(int n)
> {
> long r=0;
> for(int i=1;i<=log10(n);i++)
> {
> r+=9*long(pow10(i-1))*i;
> }
> r+=(n-pow10(log10(n))+1)*(log10(n)+1);
> return r;
> }
>
> int main()
> {
> int n;
> scanf("%d",&n);
> long m[n];
> for(int i=0;i<n;i++)
> {
> scanf("%d",&m[i]);
> for(int j=i-1;m[j+1]<m[j]&&j>=0;j--)
> {
> long t=m[j+1];
> m[j+1]=m[j];
> m[j]=t;
> }
> }
> unsigned long k=0;
> int p=0;
> for(int j=1;;j++)
> {
> long w=width(j);
> long w2=w;
> while(k+w2>=m[p])
> {
> w=w2;
> for(int i=j;i>0;i--)
> {
> char a[20];
> sprintf(a,"%d",i);
> w-=strlen(a);
> if(k+w<m[p])
> {
> printf("%c\n",a[m[p]-k-w-1]);
> break;
> }
> }
> p++;
> if(p==n)goto ending;
> }
> k+=w2;
> }
> ending:
> return 0;
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator