假期
一个简单的动态规划,注释写的很明白了
var n = parseInt(readline());
var p1 = new Array(n);
var p2 = new Array(n);
var line = readline();
var lines = line.split(' ');
for(let i = 0; i < n; i++){
p1[i] = parseInt(lines[i]);
}
line = readline();
lines = line.split(' ');
for(let i = 0; i < n; i++){
p2[i] = parseInt(lines[i]);
}
var solution = (n, p1, p2) => {
let dp = new Array(n+1).fill(0);
//0休息,1工作,2健身,3可工作可健身
for(let i = 1; i <= n; i++){
//1.如果前一天休息,或可工作可健身
if(dp[i-1] === 0 || dp[i-1] === 3){
if(p1[i-1] && p2[i-1]) dp[i] = 3;
else if(p1[i-1]) dp[i] = 1;
else if(p2[i-1]) dp[i] = 2;
else dp[i] == 0;
}
//2.如果前一天工作了
else if(dp[i-1] === 1){
if(p2[i-1]) dp[i] = 2;
else dp[i] = 0;
}
//3.如果前一天健身了
else if(dp[i-1] === 2){
if(p1[i-1]) dp[i] = 1;
else dp[i] = 0;
}
}
let res = 0;
for(let i = 1; i <= n; i++){
if(dp[i] === 0) res++;
}
return res;
}
console.log(solution(n, p1, p2));
视野争夺
不知道什么原因只通过了90%
var line = readline();
var lines = line.split(' ');
var n = parseInt(lines[0]);
var L = parseInt(lines[1]);
var rounds = [];
for(let i = 0; i < n; i++){
line = readline();
lines = line.split(' ');
let a = parseInt(lines[0]);
let b = parseInt(lines[1]);
rounds.push([a, b]);
}
var solution = (rounds, L) => {
//排序
rounds.sort((a, b) => {
return a[0] - b[0] || (a[0] === b[0] && a[1] - b[1]);
});
let res = 0;
let i = 0, pre = 0, last = 0;
while(i < rounds.length){
//所有能接上前一区间的
while(i < rounds.length && rounds[i][0] <= pre){
last = Math.max(last, rounds[i][1]);
i++;
}
res++;
pre = last;
//当前区间与前面选择的区间接不上,则没有结果
if(i < rounds.length && rounds[i][0] > pre){
return -1;
}
if(last >= L) break;
}
return res;
}
console.log(solution(rounds, L));