| ||||||||||
| 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 | |||||||||
集合上面两位的优点,235msIn Reply To:Re:700多ms过的 用公式可以0ms飘过 那样就更水了 Posted by:980616701 at 2009-05-31 09:26:48
#include<stdio.h>
#include<stdlib.h>
//#include<math.h>
typedef struct
{
int value;
int ans;
int s;
}node;
int cmp(const void *a,const void *b)
{
node *p=(node*)a;
node *q=(node *)b;
if((p->value)>(q->value))return 1;
else if((p->value)<=(q->value))return -1;
// else if(p->s<q->s)return 0;
//else return 1;
}
int cmp2(const void *a,const void *b)
{
node *p=(node*)a;
node *q=(node *)b;
if(p->s>q->s)return 1;
return -1;
}
int main()
{
int c;
double ans=1.0;
int bit=0;
int i=0,j;
// freopen("datain1.txt","r",stdin);
// freopen("dataout.txt","w",stdout);
scanf("%d",&c);
node *n=(node *)malloc(sizeof(node)*(c+1));
n[0].value=0;
for(i=1;i<=c;i++)
{
scanf("%d",&n[i].value);
n[i].s=i;
n[i].ans=0;
}
qsort((void*)(n+1),c,sizeof(n[0]),cmp);
// for(i=0;i<=c;i++)
// printf("%d ",n[i].value);
for( i=1,j=n[i-1].value;i<=c&&j<=n[i].value;)
{
j++;
if(j>n[i].value)
{
n[i].ans=bit;
j=n[i].value;
i++;
// continue;
}
else
{
ans*=j;
if(ans<10){;}
else if(ans<100){ans/=10;bit+=1;;}
else if(ans<1000){ans/=100;bit+=2;;}
else if(ans<10000){ans/=1000;bit+=3;;}
else if(ans<100000){ans/=10000;bit+=4;;}
else if(ans<1000000){ans/=100000;bit+=5;;}
else if(ans<10000000){ans/=1000000;bit+=6;;}
else if(ans<100000000){ans/=10000000;bit+=7;;}
}
}
qsort(n+1,c,sizeof(n[0]),cmp2);
for(i=1;i<=c;i++)
printf("%d\n",n[i].ans+1);
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator