思路:
按要求模拟就行了,但需要注意 $x=0$ 且 $a$ 或 $b$ 在枚举的过程中出现负数的情况。
代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
int x,t,a,b,da,db;
cin>>x>>t>>a>>b>>da>>db;//输入。
if(x==0){//特判。
puts("YES");
return 0;
}else{
for(int i=0;i<=min(a/da,t-1);i++){
for(int j=0;j<=min(b/db,t-1);j++){//枚举考试时间(可以自己想一下为什么循环条件要求最小值,答案放在最后面)。
if(a-da*i==x||b-db*j==x||(a-da*i)+(b-db*j)==x){//判断是否当时的分数刚好为x值。
puts("YES");//是。
return 0;//结束程序。
}
}
}
}
puts("NO");//没有结果。
return 0;//结束程序。
}
思考题答案:
本来这个循环就是来枚举时间的,但是最后一分钟时,如果 $a$ 或者 $b$ 的分数降到了 $0$ 或以下时,就不满足题目要求了。