好难呀!

wb8888 2006-10-22 06:14:26
刚学编程,老师布置的题目太难了!老大们帮帮我吧!
用C语言实现
题目如下:
第1题:假设一共有 n 个题目,每个题目 i 你都需要一个单位时间来完成。同时每个题目 i 都有一个完成期限 di 和相应的分数 pi 。这里的完成期限是指应在开始时间之后 di 个时间单位内(含di)完成,不能迟交。

  所有题目同时开始计时,当且仅当题目 i 在它的期限截止以前被完成时,你才能获得 pi 的分数。完成期限的设定使得你不一定能将所有的题目全都按时完成。因此只有合理安排做题的顺序,才能在有限的时间内获得最高的分数。

  问:在这种条件下,你能够得到的最高的分数是多少?

Input

第一行输入题目的总个数 n <= 10000;
第二行输入各个题目的分数 0 < pi <= 100;
第三行输入每一个题目的完成期限 0 < di <=10000;

Output

输出最高的分数。

测试用数据:
第一组:
6
5 25 20 30 10 15
1 5 2 3 3 2
结果:90
第二组:
5
10 50 50 50 50
1 2 2 2 2
结果:100
第三组:
5
10 50 50 50 50
5 2 2 2 2
结果:110

第2题:

Description
众所周知,联盟有很多水王,他们的发贴数是如此之多,以至于必须要用高精度数才能保存。

为了迎接国庆,联盟决定举行一次水王争霸赛,比赛的规则是将这些水王截止到2030年9月30日23时59分59秒这一刻所发的总贴数从大到小进行排序。每个水王当然都想取得尽量靠前的名次,所以他们竭尽全力,不择手段地进行灌水。

终于,激动人心的一刻到来了,2030年10月1日0时0分0秒,你作为裁判得到了每个水王的发贴数,现在,你的任务是公正地把这些水王按照发贴数从大到小进行排序。

Input
输入的第一行是一个1到1000的整数N,表示总共有N位水王参加了争霸赛。

以下依次给出每位水王的描述,一位水王的描述占据两行,第一行为一个仅由字母和数字组成的长度不超过20的字符串,代表这个水王的ID,第二行一个高精度的整数(非负数),代表这个水王的发贴数。注意,这个整数的首位没有不必要的0。

所有水王发贴数数字的总长度(注意,是总长度而不是总和)不会超过10000。
除了子母、数字和必要的换行,输入中不会出现空格等字符。

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


测试用例
测试输入
6
lowai
1534534124561243453
zhouyuan
23453265344
Maolaoda
23442353452342
BuTaoCaiGuai
7568784573464
ArthurKing
97534892734723947
hyyylr
623893451

期待的输出
lowai
ArthurKing
Maolaoda
BuTaoCaiGuai
zhouyuan
hyyylr
...全文
1019 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
njqibin 2006-10-23
  • 打赏
  • 举报
回复
第一题用贪婪算法应该可以。

第二题有点乱,不看了。。。
myjava_024 2006-10-23
  • 打赏
  • 举报
回复
把每个不超过20位的高精度整数作为字符串读取并且保存,
然后每个不满20位的整数前面补'0'字符,使它刚好是20位
利用strcmp就可以比较大小了
输出的时候可以跳过开始连续的'0'字符

meteoroid1984 2006-10-23
  • 打赏
  • 举报
回复
两个题目我看得都晕。我现在知道了。我的老师不是个BT,哈哈。同情你啊。兄弟
lanfker 2006-10-23
  • 打赏
  • 举报
回复
我觉得用int类型的数组做‘加法’要方便点,就是多用了点空间~
leonkiros2004 2006-10-23
  • 打赏
  • 举报
回复
经典~我想想啊~
IEQQ 2006-10-23
  • 打赏
  • 举报
回复
第一个涉及到抢占式多任务操作系统的调度,
有些策略, 比如短作业优先,结合贪婪算法。
问问你们的操作系统老师吧,

偶那个时候,也没有好好学,搞不定。 帮你顶一下。
yjgoo199 2006-10-23
  • 打赏
  • 举报
回复
第二题就是排序。

像Bosscat(不知天高地厚的波斯猫) 兄说的那样定义一个结构。

存放水王名,和一个char [10000]。

输入的数不足10000位的后面补零。

用一种排序方法对char [1000]用strcmp 进行比较,对结构进行排序。

按顺序输出结构.水王名变量。

基本因该可以实现题目的要求。。。
呵呵!
wb8888 2006-10-23
  • 打赏
  • 举报
回复
第二个问题求解!
Bosscat 2006-10-22
  • 打赏
  • 举报
回复
wb8888(不后悔) ( ) 信誉:100 Blog 2006-10-22 21:32:00 得分: 0


水王排名的问题大家再帮帮忙!
给点思路,定义为数组好象不行!


需要进行动态分配。
Bosscat 2006-10-22
  • 打赏
  • 举报
回复
定义一个结构表示水王
struct {
char *id;
int address;
int length;
}
用一个长度为21的字符数组做缓存。
因为只要求了帖子数的总长度,所以必须定义一个长度为10000的字符数组来存放帖子数。将每个水王的帖子数连续存放,在相应的结构变量中保存起始地址(也就是数组下标),和数目长度。
wb8888 2006-10-22
  • 打赏
  • 举报
回复
水王排名的问题大家再帮帮忙!
给点思路,定义为数组好象不行!
aniy2618494 2006-10-22
  • 打赏
  • 举报
回复
你老师是个BT啊,兄弟,同情子.
Kusk 2006-10-22
  • 打赏
  • 举报
回复
你哪个学校的?题目好面熟。
wb8888 2006-10-22
  • 打赏
  • 举报
回复
水王排名的问题大家再帮帮忙!
给点思路,定义为数组好象不行!
wb8888 2006-10-22
  • 打赏
  • 举报
回复
第一题出来了,大家看有什么改进的吗?
#include "stdio.h"
main()
{static int p[100],d[10000],c[10000],m,n,t,i,j,k,flag=0,q,x,sum=0;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&p[i]);
for(i=0;i<n;i++)
scanf("%d",&d[i]);
for(i=0;i<n-1;i++)
{q=i;
for(j=i+1;j<n;j++)
{if(d[q]>d[j])q=j;
if(d[q]==d[j]){if(p[q]<p[j])
{x=p[q];p[q]=p[j];p[j]=x;}
}
}
if(q!=i)
{m=d[q];d[q]=d[i];d[i]=m;
t=p[q];p[q]=p[i];p[i]=t;
}

}
t=0;
for(i=0;i<n-1;i++)
if(d[i]!=d[i+1])
{c[t]=i;
t++;
}
if(d[c[t-1]]!=d[n-1])
{c[t]=n-1;

t++;
}
if(p[0]>=p[c[0]+1])
flag=1;
x=0;
if(flag!=0)
{for(i=0;i<=c[0];i++)
{sum+=p[i];
x++;
if(x==d[i])
break;
}
}
for(i=1;i<t;i++)
{for(j=c[i-1]+1;j<=c[i];j++)
{sum+=p[j];
x++;
if(x==d[j])
break;
}
}
printf("%d\n",sum);
}
Kusk 2006-10-22
  • 打赏
  • 举报
回复
不会吧,我在Linux下跑得挺好啊。难道内存出错?
请问可是运行期的问题?
wb8888 2006-10-22
  • 打赏
  • 举报
回复
Kusk(Kusk) :
运行看不到结果,提示"Abnormal program termination"
Kusk 2006-10-22
  • 打赏
  • 举报
回复
回复人:A553990() ( 一级(初级)) 信誉:100 2006-10-22 20:22:00 得分:0
?
问下各位前辈 应该如何比较哪个长度不超过10000的数字 C++中??

前面有朋友说的转成字符串再补零后比较字典序是一个好方法。
A553990 2006-10-22
  • 打赏
  • 举报
回复
问下各位前辈 应该如何比较哪个长度不超过10000的数字 C++中??
Kusk 2006-10-22
  • 打赏
  • 举报
回复
回复人:pcboyxhy(-273.15℃) ( 两星(中级)) 信誉:110 2006-10-22 18:35:00 得分:0
?
1 贪心算法。
价值最大的题目一定要做,假如你不做,那么把这个题目规定最晚时间之前完成的任意一个题目替换成它,
那么所得到的总分就会更高。依次类推,只要把价值高的题目做了就行了

===================================================================
思路方向是正确的,但描述稍有粗糙。改成“当前价值最大并且没有超过时限的题目一定要做”,
就比较贴近实现了。
加载更多回复(15)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧