<cf>Two Problems

本文介绍了一种判断参赛者在特定限时编程比赛中能否获得指定分数的方法。比赛仅包含两个题目,每个题目的分值随时间递减。文章通过示例说明了如何验证参赛者是否能在限定时间内获得期望分数。
A. Two Problems
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

A boy Valera registered on site Codeforces as Valera, and wrote his first Codeforces Round #300. He boasted to a friend Arkady about winning as much as x points for his first contest. But Arkady did not believe his friend's words and decided to check whether Valera could have shown such a result.

He knows that the contest number 300 was unusual because there were only two problems. The contest lasted for t minutes, the minutes are numbered starting from zero. The first problem had the initial cost of a points, and every minute its cost reduced by da points. The second problem had the initial cost of b points, and every minute this cost reduced by db points. Thus, as soon as the zero minute of the contest is over, the first problem will cost a - da points, and the second problem will costb - db points. It is guaranteed that at any moment of the contest each problem has a non-negative cost.

Arkady asks you to find out whether Valera could have got exactly x points for this contest. You should assume that Valera could have solved any number of the offered problems. You should also assume that for each problem Valera made no more than one attempt, besides, he could have submitted both problems at the same minute of the contest, starting with minute 0 and ending with minute number t - 1. Please note that Valera can't submit a solution exactly t minutes after the start of the contest or later.

Input

The single line of the input contains six integers x, t, a, b, da, db (0 ≤ x ≤ 600; 1 ≤ t, a, b, da, db ≤ 300) — Valera's result, the contest's duration, the initial cost of the first problem, the initial cost of the second problem, the number of points that the first and the second problem lose per minute, correspondingly.

It is guaranteed that at each minute of the contest each problem has a non-negative cost, that is, a - i·da ≥ 0 and b - i· db ≥ 0 for all 0 ≤ i ≤ t - 1.

Output

If Valera could have earned exactly x points at a contest, print "YES", otherwise print "NO" (without the quotes).

Sample test(s)
input
30 5 20 20 3 5
output
YES
input
10 4 100 5 5 1
output
NO
Note

In the first sample Valera could have acted like this: he could have submitted the first problem at minute0 and the second problem — at minute 2. Then the first problem brings him 20 points and the second problem brings him 10 points, that in total gives the required 30 points.

这不是一道难题,但是一次AC还是不易的,因为有些细节问题很容易忽略,首先可以两题答错(x=0),也可以只答对一题,也可以两题皆对。

AC code

#include <iostream>
using namespace std;
int main()
{
    int x,t,a,b,da,db,i;
    double ta,tb;
    bool flag;
    while(cin>>x>>t>>a>>b>>da>>db)
    {
        flag=false;
        if(x==0) flag=true;
        for(i=0;i<t && !flag;i++)
        {
            int m=x-(a-i*da);
            if(m==0 || m==b)
            {
                flag=true;
            }
            else if(m>0 && m<b)
            {
                tb=1.0*(b-m)/db;
                if((int)tb==tb && tb>=0 && tb<t)
                {
                    flag=true;
                }
            }
        }
        for(i=0;i<t && !flag;i++)
        {
            int m=x-(b-i*db);
            if(m==0 || m==a)
            {
                flag=true;
            }
            else if(m>0 && m<a)
            {
                ta=1.0*(a-m)/da;
                if((int)ta==ta && ta>=0 && ta<t)
                {
                    flag=true;
                }
            }
        }
        if(flag) cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
    }
    return 0;
}


转载于:https://www.cnblogs.com/cszlg/archive/2012/07/14/2910594.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值