链接:https://ac.nowcoder.com/acm/contest/332/A
来源:牛客网
题目描述
小B准备出模拟赛。
她把题目按难度分为四等,分值分别为6,7,8,9。
已知小B共出了m道题,共n分。
求小B最少出了多少道6分题。
输入描述:
两个正整数n,m
输出描述:
一个数,表示答案。 若无解,输出"jgzjgzjgz"。
示例1
输入
34 5
输出
1
示例2
输入
32 5
输出
3
示例3
输入
5 1
输出
jgzjgzjgz
备注:
n,m≤1012
这次比赛最坑的就是,最像暴力的题反而不是暴力,最像推公式的题反而暴力可过……(。
本来就是求一个最小值->x的取值范围,不知道为什么我当时总往求解x上想……!真实zz
然后搬一下说的很明白的官方题解:
作者:kczno1
链接:https://ac.nowcoder.com/discuss/153349?type=101&order=1&pos=8&page=1
来源:牛客网
显然,有解的充要条件为 6m≤n≤9m 。
若有解:
设有 x(0≤x≤m)道6分题,则剩下的m-x题共n-6x分,
则剩下的题有解的充要条件为 7(m−x)≤n−6x≤9(m−x) ,
解得 7m−n≤x≤(9m−n)/3。
因此答案为max(0,7m-n)。
ac代码:
#include <iostream>
#define ll long long
using namespace std;
int main()
{
ll n,m;
cin>>n>>m;//n分,m道题
if(n<m*6||n>9*m){
cout<<"jgzjgzjgz"<<endl;
}else{
cout<<max((ll)0,7*m-n)<<endl;
}
return 0;
}