Решение задачи Будильник с Codeforces

Без пояснения   Просмотров: 50


Поликарп провел целый день за подготовкой задач для вас. Теперь ему нужно поспать хотя бы a минут, чтобы отдохнуть.

Поликарп может проснуться только от звука будильника. Он только заснул, а его первый будильник прозвонит ровно через b минут.

Каждый раз когда Поликарп просыпается, он решает, заводить ли будильник еще раз или нет. Если он проспал меньше a минут суммарно, то он заводит будильник так, чтобы тот прозвонил ровно через c минут, и тратит d минут, чтобы снова заснуть. Иначе же он встает с кровати, начиная новый день.

Если будильник звонит, пока Поликарп все еще засыпает, то он снова его заводит на c минут и опять тратит d минут, чтобы заснуть.

Вам же всего лишь предстоит выяснить, когда Поликарп встанет с кровати или сообщить, что это не случится никогда.

Пожалуйста, прочитайте пояснение, чтобы получше понять пример.

Код

#include <bits/stdc++.h>
using namespace std;

void solve()
{
    long long t = 0, a, b, c, d;
    cin >> a >> b >> c >> d;
    if(b >= a){
        cout << b << endl;
        return;
    }
    if(d >= c){
        cout << -1 << endl;
        return;
    }
    a-=b;
    t+=b;
    if((a % (c - d)) == 0)
        t += (a / (c - d)) * (c);
    else
        t += ((a / (c - d)) + 1) * (c );
    cout << t << endl;
}
int main() {
	int t;
	cin >> t;
	while(t--){
        solve();
	}
	return 0;
}

         

Администратор Photo Автор: Администратор



Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться