当前位置: 代码迷 >> C语言 >> 弱弱的问个问题
  详细解决方案

弱弱的问个问题

热度:247   发布时间:2006-12-02 09:35:55.0
弱弱的问个问题


2003年提高组的一道题,谁给下具体代码,谢谢了。
附:
描述 Description
比赛的规则是将这些水王截止到2003年9月30日23时59分59秒这一刻所发的总贴数从大到小进行排序。每个水王当然都想取得尽量靠前的名次,所以他们竭尽全力,不择手段地进行灌水。
终于,激动人心的一刻到来了,2003年10月1日0时0分0秒,你作为裁判得到了每个水王的发贴数,现在,你的任务是公正地把这些水王按照发贴数从大到小进行排序。



输入格式 Input Format
输入的第一行是一个1到1000的整数N,表示总共有N位水王参加了争霸赛。
以下依次给出每位水王的描述,一位水王的描述占据两行,第一行为一个仅由字母和数字组成的长度不超过20的字符串,代表这个水王的ID,第二行一个高精度的整数(非负数),代表这个水王的发贴数。注意,这个整数的首位没有不必要的0。
考虑到IOIForum的数据库是有限的,所有水王发贴数的总长度(注意,是总长度而不是总和)不会超过10000。
除了子母、数字和必要的换行,输入中不会出现空格等字符。



输出格式 Output Format
依次输出按照发贴数从大到小排好序的各位水王的ID,每个ID占据单独的一行。不能有任何多余的字符。若几个ID的发贴数相同,则按照ID的字典顺序先后排列。





样例输入 Sample Input
6
lowai
1534534124561243453
zhouyuan
23453265344
Maolaoda
23442353452342
BuTaoCaiGuai
7568784573464
ArthurKing
97534892734723947
hyyylr
623893451



样例输出 Sample Output
lowai
ArthurKing
Maolaoda
BuTaoCaiGuai
zhouyuan
hyyylr



时间限制 Time Limitation
对于100%的数据时限=1s

[此贴子已经被作者于2006-12-3 19:39:23编辑过]

搜索更多相关的解决方案: class  

----------------解决方案--------------------------------------------------------
考虑到IOIForum的数据库是有限的,所有水王发贴数的总长度(注意,是总长度而不是总和)不会超过10000。
这句话有什么作用?


struct Big_number{
char str[20]; //ID
short int key[10000]; //存储发帖数
int len; //发帖数的长度
}

只要对key做比较,然后相同的再比较ID 就可以了.
----------------解决方案--------------------------------------------------------
以下是引用nuciewth在2006-12-2 10:42:20的发言:
考虑到IOIForum的数据库是有限的,所有水王发贴数的总长度(注意,是总长度而不是总和)不会超过10000。
这句话有什么作用?

就应该考虑 所有 贴数 总和要小于10000


----------------解决方案--------------------------------------------------------
struct shui{
char id[20]; //记录id
char shumu[10000]; //记录每个数字中的每一位
}
只要数字是满足正常输入,则通过shumu的长度对struct排序(可以知道长度大的数字就大),然后对 相同长度的进行shumu的字典排序(毕竟数字大ASCII也大),然后再对id字典排序即可。
----------------解决方案--------------------------------------------------------
第二行一个高精度的整数(非负数),代表这个水王的发贴数。
可是这上面的每一个水王发的帖子数已经远远超过10000了.
----------------解决方案--------------------------------------------------------
代码贴出来看看
----------------解决方案--------------------------------------------------------
这道题好烦,一下午都没做出来
----------------解决方案--------------------------------------------------------
以下是引用yelo20053533在2006-12-2 11:44:29的发言:
代码贴出来看看

写了个,看可不可以.


#include<stdio.h>
#include<string.h>

typedef struct Big_number{
char Id[20];
short int num[100];
int len;
};

int bijiao(Big_number a,Big_number b)
{
if(a.len>b.len)
{
return 1;
}
if(a.len<b.len)
{
return -1;
}
for(int i=0;i<a.len;i++)
{
if(a.num[i]>b.num[i])
{
return 1;
}
if(a.num[i]<b.num[i])
{
return -1;
}
}
return strcmp(b.Id,a.Id);

}

void sort(Big_number a[],int n)
{
int i,j;
Big_number temp;
for(i=0;i<n;i++)
{
for(j=0;j<n-1;j++)
{
if(bijiao(a[j],a[j+1])==-1)
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
int main()
{
#ifdef ONLINE_JUDGE
freopen("water.txt","r",stdin);
#endif
Big_number data[1000];
int n;
char id[20],number[100];
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%s%s",id,number);
strcpy(data[i].Id,id);
data[i].len=strlen(number);
for(int j=0;j<data[i].len;j++)
{
data[i].num[j]=number[j]-'0';
}
}
sort(data,n);
for(int i=0;i<n;i++)
{
printf("%s\n",data[i].Id);
}
return 0;
}


----------------解决方案--------------------------------------------------------

能解释一下吗?有些晕。。。。
这是C语言吗??


----------------解决方案--------------------------------------------------------
而且好像编译失败
----------------解决方案--------------------------------------------------------