#P1032. 第2题-桃子礼包
-
1000ms
Tried: 287
Accepted: 75
Difficulty: 4
所属公司 :
阿里
时间 :2022年11月5日-淘天
-
算法标签>数学
第2题-桃子礼包
题目思路
首先明白塔子哥的决策:
- a元b桃
- c元d桃
然后我们分类讨论:
- a<c
- b<d:我们直接买b个桃子,就行
- b>d:我们也买b个桃子,因为a<c且b>d属于物美价廉
- a=c
- b>d:我们买b个桃子,此时我们只要花a块钱,而使用第二个礼包则至少花2a。
- b<=d:我们买不了,输出−1。上一个的情况反过来就可以
- a>c
- b<=d:买不了,输出−1。这和a<c和b>d的情况反过来
- b>d:我们假设买b个,那么第二个礼包需要花费ceil(b/d)∗c元。第一个礼包花费a元
- ceil(b/d)∗c<=a,买不了,输出−1.我们买b个,人家买第二个礼包更优惠,买大于b个也一样。小于b个也一样
- ceil(b/d)∗c>a,买b个就可以。
代码
Pyhon代码
t = int(input())
for TT in range(t):
a,b,c,d = map(int, input().split())
if a < c:
print(b)
elif a == c:
print(b if b > d else -1)
else:
if b <= d:
print(-1)
else:
print(b if (b + d - 1) // d * c > a else -1)
C++代码
#include <iostream>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int a,b,c,d;
cin>>a>>b>>c>>d;
if (a<c)
cout<<b<<endl;
else if (a==c)
{
if (b>d)
cout<<b<<endl;
else
cout<< -1<<endl;
}
else
{
if (b<=d)
cout<< -1<<endl;
else if((b+d-1)/d*c>a)
cout<<b<<endl;
else
cout<< -1<<endl;
}
}
}
Js代码
process.stdin.resume();
process.stdin.setEncoding('utf-8');
let input = '';
process.stdin.on('data', (data) => {
input += data;
return;
});
process.stdin.on('end', () => {
input=input.split('\n');
var t=Number(input[0]);
for (let i=1;i<=t;i++){
var a=Number(input[i].split(' ')[0]);
var b=Number(input[i].split(' ')[1]);
var c=Number(input[i].split(' ')[2]);
var d=Number(input[i].split(' ')[3]);
if (a<c)
console.log(b);
else if (a==c)
{
if (b>d)
console.log(b);
else
console.log(-1);
}
else
{
if (b<=d)
console.log(-1);
else if((b+d-1)/d*c>a)
console.log(b);
else
console.log(-1);
}
}
})
Java代码
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int t = scanner.nextInt();
while (t-- != 0) {
int a, b, c, d;
a = scanner.nextInt();
b = scanner.nextInt();
c = scanner.nextInt();
d = scanner.nextInt();
if (a < c)
System.out.println(b);
else if (a == c) {
if (b > d)
System.out.println(b);
else
System.out.println(-1);
} else {
if (b <= d)
System.out.println(-1);
else if ((b + d - 1) / d * c > a)
System.out.println(b);
else
System.out.println(-1);
}
}
}
}
题目内容
小红是一个来自桃花村的年轻人,他从小就喜欢吃桃子。
今年桃子丰收,他想买一些桃子存放起来,以备过冬之用。他听说附近有一个卖桃子的商家,提供两种不同的桃子礼包。
小红很感兴趣,于是他前往商家那里看看。商家告诉他,第一种礼包包含 b 个桃子,售价为 a 元,第二种礼包包含 d 个桃子,售价为 c 元。
每个礼包可以买任意次,但只能选择一种礼包购买。
小红需要购买至少 k 个桃子,他希望只购买礼包 1 的花费比只购买礼包 2 的花费要小。
你能帮小红求出这个 k 吗?
输入描述
第一行输入一个正整数 t ,代表询问的次数。
接下来的 t 行,每行输入四个正整数 a , b , c , d ,用空格隔开。
1≤t≤103
1≤a,b,c,d≤109
输出描述
对于每行询问,输出一个合法的正整数 k ( 0<k<231 ), 代表买桃子的数量。
有多解时输出任意即可。如果无解则直接输出 −1 。
样例
输入
3
1 2 3 4
4 3 3 4
5 3 4 5
输出
2
-1
-1