题解:P1424 小鱼的航程(改进版)

· · 题解

给出两种做法:

做法 1

考虑 n\leq 10^6,所以我们可以暴力枚举接下来 n 天,对齐判断是星期几,如果不是周末就将最终答案加 250

int ans=0;
for(int i=1,j=x;i<=n;i++,j++){
  if(j<=5)ans+=250;
  if(j==7)j=0;
}

做法 2

考虑每 7 天游的路程相同,均为 1250,我们只需要处理两边不满 7 天的天数即可。左面不满七天的天数是 8-x 天,可以有用的是 \max(6-x,0) 天。总天数 n 要减去 8-x。右面剩余的天数是 n\bmod 7,可以游泳的天数为 \min(n\bmod 7,5) 天。计算答案即可。

int pre=max(6-x,0);
n-=8-x;
int ans=pre*150+n/7*1250+min(n%7,5)*150;