Codeforces Round #443 (Div. 2) A. Borya's Diagnosis

本文探讨了一道关于计算最少访问医生天数的问题。主人公Borya需按顺序访问n位医生以获得确切诊断,每位医生的工作日程不一。文章提供了一种高效的算法来确定Borya能完成所有访问所需的最短时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

A. Borya’s Diagnosis

Problem Statement

    It seems that Borya is seriously sick. He is going visit n doctors to find out the exact diagnosis. Each of the doctors needs the information about all previous visits, so Borya has to visit them in the prescribed order (i.e. Borya should first visit doctor 1, then doctor 2, then doctor 3 and so on). Borya will get the information about his health from the last doctor.
    Doctors have a strange working schedule. The doctor i goes to work on the si-th day and works every di day. So, he works on days si, si + di, si + 2di, ….
    The doctor’s appointment takes quite a long time, so Borya can not see more than one doctor per day. What is the minimum time he needs to visit all doctors?

Input

    First line contains an integer n — number of doctors (1 ≤ n ≤ 1000).
    Next n lines contain two numbers si and di (1 ≤ si, di ≤ 1000).

Output

    Output a single integer — the minimum day at which Borya can visit the last doctor.

Examples

Example 1
    Input
        3
        2 2
        1 2
        2 2
    Output
        4
Example 2
    Input
        2
        10 1
        6 5
    Output
        11

Note

    In the first sample case, Borya can visit all doctors on days 2, 3 and 4.
    In the second sample case, Borya can visit all doctors on days 10 and 11.

题意

    一共有n个医生,给出第i个医生的sidi在第si天,第si+di天,第si+2di天接待顾客,现在有个人需要按顺序访问,且一天他只能访问一个医生,问访问最后一个医生的时候是第几天。

思路

    这题……只要根据题意模拟一下,就可以得出答案了

Code

#pragma GCC optimize(3)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
bool Finish_read;
template<class T>
inline void read(T &x) {
    Finish_read=0;x=0;int f=1;char ch=getchar();
    while(!isdigit(ch)){if(ch=='-')f=-1;if(ch==EOF)return;ch=getchar();}
    while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
    x*=f;Finish_read=1;
}
template<class T>
inline void print(T x) {
    if(x/10!=0)
        print(x/10);
    putchar(x%10+'0');
}
template<class T>
inline void writeln(T x) {
    if(x<0)
        putchar('-');
    x=abs(x);
    print(x);
    putchar('\n');
}
template<class T>
inline void write(T x) {
    if(x<0)
        putchar('-');
    x=abs(x);
    print(x);
}
/*================Header Template==============*/
int n,s,d,now=0;
int main() {
    read(n);
    while(n--) {
        read(s);
        read(d);
        if(now<s) {
            now=s;
            continue;
        }
        int x=now-s;
        int tmp=(x%d==0)?x/d:x/d+1;
        int w=tmp*d+s;
        if(w==now)
            now=w+d;
        else
            now=w;
    }
    writeln(now);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值