专栏文章

题解:CF2051B Journey

CF2051B题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miqmwq1y
此快照首次捕获于
2025/12/04 07:24
3 个月前
此快照最后确认于
2025/12/04 07:24
3 个月前
查看原文

分析

  1. 周期计算
    • 计算一个完整周期内的总距离: S=a+b+cS=a+b+c
  2. 计算完整周期的数量
    • 计算 nn 里面有多少个完整周期: k=nSk = \left\lfloor \frac{n}{S} \right\rfloor
    • 所需的天数为 3k3k 天。
  3. 处理剩余距离
    • 计算剩余的距离: r=nk×Sr = n - k \times S
    • 如果剩余的距离 r>0r>0,则会有额外的天数。
    • 从周期的第一天开始,依次检查 a,b,ca,b, c ,直到算出额外天数。
  4. 特殊情况
    • 如果 nn 正好是完整周期的倍数,则不计算额外天数。
  5. 剩余距离处理
    • 如果 r=0r=0,则不需要额外天数。
    • 否则,依次查询 a,b,ca,b,c,直到找到满足 rr\leq 当前步数的步数。

代码

CPP
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int t;
int main(){
    cin>>t;
    while(t--){
        ll n,a,b,c;
        cin>>n>>a>>b>>c;
        ll S=a+b+c;    //计算一个完整周期
        ll k=n/S;   //计算完整周期的数量
        ll r=n-k*S;   //计算剩余的距离
        ll days=3*k;   //初始天数为3k
        if(r==0){
            //不需要额外天数
        }
        else{
            if(r<=a){
                days+=1;
            }
            else if(r<=a+b){
                days+=2;
            }
            else{
                days+=3;
            }
        }
        cout<<days<<"\n";
    }
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...