假设每喝一杯咖啡(喝咖啡时间忽略不计)就能让自己debug效率提高A倍,一小时内重复喝没用,最多只能喝X杯(太多晚上睡不着),并且为了可持续发展,每天最多只能专注8个小时的工作时间。在没喝咖啡的状态下解决每个bug所需要的时间为t1,t2,t3,…,tN分钟。
输入:多组测试数据。每组测试数据如下
第一行输入三个整数:N、A、X,分别代表需要解决的bug数量、喝咖啡之后效率提升的倍数、一天最多可以喝掉的咖啡数
第二行输入N个整数,表示在不喝咖啡的情况下解决这些bug所需的时间t1, t2, …, tN
输出:如果能在八小时内解决这些bug(如果时间为小数,向上取整),输出解决bug的时间,否则输出0
case:input:
8 2 8
60 60 60 60 60 60 60 60
4 3 3
333 77 100 13
output:
240
175
看题目都蒙了,做题一慌就废了
分析:一杯咖啡持效时间为60分钟,提升效率为A倍,那么X杯咖啡能维持X*60*A
分钟;而在不喝咖啡的情况下,改bug共需要sum
分钟;若X*60*A > sum
,在X杯咖啡的有效时间内可以把bug改完,那么实际改bug需要的时间就是Math.ceil(sum/A)
;若X*60*A <= sum
,X杯咖啡的有效时间X*60*A
不足够我们改完bug,也就是除了X杯咖啡的有效时间X*60*A
,我们还需要sum-X*60*A
分钟没有咖啡作用力的时间,所以共需要X*60+sum-X*60*A
的时间。
while(line = read_line()){
line = line.split(' ');
line = line.map(item=>{return parseInt(item)});
var N = line[0],
A = line[1],
X = line[2];
line = read_line();
line = line.split(' ');
var sum = 0;
line.forEach(item=> sum += parseInt(item));
var coffeeTime = 60*A*X;
var res;
if(coffeeTime >= sum){
res = Math.ceil(sum / A);
}
else{
res = X + sum-coffeeTime;
}
if(res > 480){
print(0)
}
else{
print(res)
}
}
输入:多组测试数据
第一行输入两个整数T、N,分别代表钱数和零食种类数。
接下来的N行,每行输入三个整数ai, bi, ci(1 <= i <= N) ,代表零食的价格、零食的满意度、零食的数量
输出:求出最大满意度
case:input
100 2
1 1 1
1 1 1
100 3
26 100 4
5 1 4
5 2 2
output
2
306
0-1背包问题求解,比普通的0-1背包问题复杂,题目给出了三个条件:零食价格,零食满意度,零食数量。这里把它看成两个条件:零食价格,零食满意度,把零食数量算到零食种类中去,然后再用常见的0-1背包 动态规划方法来求解。
赛马网JS 编译
while(line = read_line()){
// 循环读取“接下来的M行”
line = line.split(' ');
var N = parseInt(line[0]),
M = parseInt(line[1]);
var prices = [],values = [];
for(var i=0;i{return parseInt(item)});
for(var j=0;j=prices[0]){
dp[0][i] = values[0];
}
}
for(var j=0;j<=N;j++){
for(var i=1;i
原文链接:https://blog.csdn.net/Charles_Tian/article/details/80967468
1.将浮点数点左边的数每三位添加一个逗号,如12000000.11转化为12,000,000.11?
(1)正则表达式
function commafy(num){
return num && num.toString().replace(/\B(?=(\d{3})+\.)/g, ',');
}
console.log(commafy(1231423423.22)) //1,231,423,423.22
(2)字符串操作方法
function formatNum(num){
var newStr = "";
var count = 0;
var str = num.toString();
for(var i = str.indexOf(".")-1;i>=0;i--){
if(count % 3 == 0 && count != 0){
newStr = str.charAt(i) + "," + newStr;
}else{
newStr = str.charAt(i) + newStr; //逐个字符相接起来
}
count++;
}
str = newStr + str.substr(str.indexOf("."));
return str
}
2.事件委托(给出一个ul标签和三个li标签,每个li标签各有一个id名,js通过for循环给每个li标签添加了一个click事件。问以下代码还有什么可以优化的地方?)
HTML部分:
JS部分:
var list = document.getElementsByTagName('li');
for (var i = 0; i < list.length; i++) {
list[i].onclick = function(){
console.log(this.innerHTML)
}
};
每添加一个事件就会耗费一部分内存,所以事件越少性能越高。
事件委托就是利用事件冒泡的原理,委托子元素的父元素去代理执行事件,所以,上述方式是添加了三个事件,而通过事件委托可只需要添加一个点击事件即可实现相同的功能。
var menu = document.getElementById('menu');
menu.addEventListener('click',function(e){
console.log(e.target.id + ' was clicked')
})
注意,e.currentTarge是指注册了事件监听器的对象,e.target是指对象里的子对象,实际触发这个事件的对象。