转跳到内容

每 日 算 法 挑 战 【第3期·周末特辑】


推荐贴

本期是周末特辑,是今明两天的题目哦!

今天的题目是BIT2018年校赛的A题。不出意外的话,下周的周末特辑会是B题,再下周C题,一直出到J题√

据说那年A题是个签到题,不过毕竟是第一周嘛,就白给一下啦。下面看题:

A 克鲁苏的呼唤(搬运工注:原文如此)

克苏鲁的眷族之一,隐藏在数字中的邪神,正在从宇宙深渊中复苏。

在他潜移默化的引导下,人类建立了自以为傲的计算机系统,而这,正是他复苏的物质基石。

是否经常因为代码而陷入疯狂?

下降的san值(sanity,理智、精神正常)正是受到邪神启蒙的证明。

现在共有N种算法,学习算法i将会导致san值下降

初始san值是S,最多可以学习多少个算法还能保持san值大于0?

 

输入

多组用例,以文件尾EOF结束输入,每组用例第一行两个整数N和S分别代表算法的数量和初始san值,第二行N个整数,第i个数代表学习算法i降掉的san值

 

 

输出

对于每组用例输出一个整数占一行,表示保持san值大于0的情况下,最多能学的算法数量

 

样例输入

1 1
1
5 10
1 2 3 4 5

 

样例输出

0
3

 

样例解释

对于第一组用例,学习算法1会使得san值变成0,故无法学习任何算法;

对于第二组用例,学习任意四个算法都会使得san值变成0,而学习算法1,2,3是可以的。

,由Mr.K 018修改
注释
摸鱼奇才咖啡喵 摸鱼奇才咖啡喵 110.00节操 恰猫粮~
链接到点评

艹今天居然是隐藏在数字中的邪神(x

 

艹难怪写代码写久了我觉得san值下降

太艹了(

 

艹是01背包?不过每个算法的价值都是1的话,那直接升序从小的开始拿就好了吧……

或者直接求最小S个元素,用快排的分割部分就好,然后拿这最小S个sort一遍就好了

 

或者更精确地可以先扫一遍,拿到最小值min_i san,然后求最小(S / min)个元素

当然如果X比(S / min)小的话那就直接sort就好了

 

当然我这里是假定第二行全都是正整数的,也就是不存在没有代价就能学会的算法!(逃

 

 

,由yhz012修改
注释
Mr.K 018 Mr.K 018 10.00节操 糖~
链接到点评

Matlab的写法比较熟悉,就假设用matlab吧(虽然matlab算是伪代码吧)

手头没有Matlab没法测试,写出bug不管啊(甩

而且很久没写了,你们谁有matlab可以去跑跑看www

代码以下:

剧透

 

function My_Output = Sanity_Calc([N S], Array)

i = 0; % Set initial count to 0

Array2 = sort(Array);

while S>=0 && N > 0

S = S - Array2[1]  % Matlab has 1-based index

Array2[1] = [] % Remove min value

i = i + 1; % Increase count by 1

N = N - 1; % Decrease total count N by 1

end

if N > 0 

i = i - 1; % Remove extra count from last loop

end

 

其实,既然第二个input,也就是那个N个整数的array是1*N的,N这个input根本就不需要吧喂!

剩余的算法数量查Array2就知道了www

,由可洛修改

可洛约寒幼藏出去郊游,结果被放了鸽子,只好抓住鸽子煲汤,小鱼路过喝了一口点了个赞并扔下3节操

注释
NianRuoshui NianRuoshui 10.00节操 是大佬!
NierPod042 NierPod042 10.00节操 可洛大佬真是什麼都懂呢
链接到点评
41 分钟前, 可洛 说道:

Matlab的写法比较熟悉,就假设用matlab吧(虽然matlab算是伪代码吧)

手头没有Matlab没法测试,写出bug不管啊(甩

而且很久没写了,你们谁有matlab可以去跑跑看www

代码以下:

  显示隐藏内容

 

function My_Output = Sanity_Calc([N S], Array)

i = 0; % Set initial count to 0

Array2 = sort(Array);

while S>=0 && N > 0

S = S - Array2[1]  % Matlab has 1-based index

Array2[1] = [] % Remove min value

i = i + 1; % Increase count by 1

N = N - 1; % Decrease total count N by 1

end

if N > 0 

i = i - 1; % Remove extra count from last loop

end

 

其实,既然第二个input,也就是那个N个整数的array是1*N的,N这个input根本就不需要吧喂!

剩余的算法数量查Array2就知道了www

暂时发不出糖了,可以等明天吗(悲

注释
可洛 可洛 1.00节操 没事www,不差糖,就是来玩的
链接到点评
×
×
  • 新建...

重要消息

为使您更好地使用该站点,请仔细阅读以下内容: 使用条款