首页 > 代码库 > codevs 3911 QQ价值

codevs 3911 QQ价值

题目描述 Description

现在的年轻人都有自己的QQ号码,但是每个人的QQ号码不同,因此所产生的QQ“价值”也不同。已知道QQ号码的“价值”是由QQ号码的位数和构成数字大小所决定的。也就是说,QQ号码长度越小,“价值”越大。构成数字越大,“价值”越大。我们规定:

一个QQ号码的“价值”=(各位数字之和*P(P>0)/QQ号码位数)向下取整

例如:QQ号码 123456 的“价值”为 (1+2+3+4+5+6)*P/6 向下取整

      QQ号码 1212121 的“价值”为(1+2+1+2+1+2+1)*P/7 向下取整

 

输入描述 Input Description

第一行输入整数N,P;

接下来的2N行分别输入每个人的名字和QQ号码(名字和QQ号各占一行)

 

输出描述 Output Description

按QQ“价值”由大到小输出名字,(若“价值”相同,按字典序输出)

样例输入 Sample Input

3 10

Drew

1164371383

Adam

1324432934

Kyle

578507419

 

样例输出 Sample Output

Kyle

Drew

Adam

 

数据范围及提示 Data Size & Hint

0<N<=10000

0<P<=20

保证名字长度<500

保证QQ号码超度<400

代码:

#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int n,p,tot;struct node{    char name[501];    int sum;}a[10001];bool cmp(const node &x,const node &y){    if(x.sum!=y.sum)        return x.sum>y.sum;    else       if(strcmp(x.name,y.name)>0) //如果价值相同,按字典序排序        return 0;      else         return 1;}int read(){    int ans=0;    char x=getchar();    while(x>9||x<0)      x=getchar();    while(x<=9&&x>=0)      ans+=(x-0),tot++,x=getchar();    return ans;}int main(){    int i,j;    scanf("%d%d",&n,&p);    for(i=1;i<=n;i++)    {        scanf("%s",a[i].name);        tot=0;        a[i].sum=read()*p/tot;    }    sort(a+1,a+n+1,cmp);    for(i=1;i<=n;i++)      printf("%s\n",a[i].name);    return 0;}

 

codevs 3911 QQ价值