HDU-5310-Souvenir(C++ && 简单数学题)

Souvenir

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)

Total Submission(s): 416    Accepted Submission(s): 270

Problem Description

Today is the 1st anniversary of BestCoder. Soda, the contest manager, wants to buy a souvenir for each contestant. You can buy the souvenir one by one or set by set in the shop. The price for a souvenir is  yuan
and the price for a set of souvenirs if  yuan.
There‘s  souvenirs
in one set.

There‘s  contestants
in the contest today. Soda wants to know the minimum cost needed to buy a souvenir for each contestant.

Input

There are multiple test cases. The first line of input contains an integer  ,
indicating the number of test cases. For each test case:

There‘s a line containing 4 integers  .

Output

For each test case, output the minimum cost needed.

Sample Input

2
1 2 2 1
1 2 3 4

Sample Output

1
3

Hint

For the first case, Soda can use 1 yuan to buy a set of 2 souvenirs.
For the second case, Soda can use 3 yuan to buy a souvenir.

Source

BestCoder 1st Anniversary ($)

Recommend

hujie   |   We have carefully selected several similar problems for you:  5315 5314 5313 5312 5311

BestCoder官方解析:

1001 Souvenir

本题是一个简单的数学题. 假设套装优惠的话就尽量买套装, 否则单件买. 注意一下假设一直用套装的话可能在最后的零头不如单买好, 即.
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    int t,n,m,p,q;//单位价格p元,套装q元,一个套装有m个纪念品,总共n个參赛者
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d%d%d",&n,&m,&p,&q);
        int price = 0;
        if(q/m<p)//假设套装优惠的话尽量买套装
        {
            if((n%m)*p<q)//假设在买套装最后零头的处理不如单位价格买廉价
            {
                price = (n/m)*q+(n%m)*p;//就在最后零头买单位价格
            }
            else
            {
                price = (n/m+1)*q;//否则多买一个套装
            }
        }
        else//否则直接单位价格买
        {
            price = n*p;
        }

        printf("%d\n",price);
    }
    return 0;
}

中文题目在以下:

Souvenir

Accepts: 901

Submissions: 2743

Time Limit: 2000/1000 MS (Java/Others)

Memory Limit: 262144/262144 K (Java/Others)

问题描写叙述

今天是BestCoder一周年纪念日. 比赛管理员Soda想要给每一个參赛者准备一个纪念品. 商店里纪念品的单位价格是元, 同一时候也能够花元购买纪念品套装, 一个套装里有个纪念品.

今天总共同拥有个參赛者, Soda想要知道最少须要花多少钱才干够给每一个人都准备一个纪念品.

输入描写叙述

输入有多组数据. 第一行有一个整数 , 表示測试数据组数. 然后对于每组数据:

一行包括4个整数  .

输出描写叙述

对于每组数据输出最小花费.

输入例子

2
1 2 2 1
1 2 3 4

输出例子

1
3

Hint

对于第一组数据, Soda能够1元购买一个套装. 对于第二组数据, Soda能够直接花3元购买一个纪念品.

时间: 2024-08-06 15:40:24

HDU-5310-Souvenir(C++ &amp;&amp; 简单数学题)的相关文章

hdu 5310 Souvenir (简单题)

这是一道稍微仔细想想就可以做出来的简单题,而我wa了两次,这也是把它写上来的原因,只是因为我没有认真想,还是不够仔细啊,还是很马虎啊,不能慌张,得仔细读题,慢慢想题. 思路: 一共只有几种情况:1全部用单价p买:2全部用套装q买:3先用套装买,剩下的用单价p买 注:不必判断先用单价p再用套装(如果先用p的话就证明单价比套装更划算(买相同数量所需要的话费)) 贴代码: #include<stdio.h> #include<stdlib.h> #include<string.h&

hdu 5310 Souvenir(BestCoder 1st Anniversary ($))

http://acm.hdu.edu.cn/showproblem.php?pid=5310 题目大意:要买n个纪念品,可以单个买p元每个,可以成套买q元一套,每套有m个,求最少花费 #include<stdio.h> #include<math.h> #include<string.h> #include<stdlib.h> #define N 110 using namespace std; int main() { int t, sum, n, m,

hdu 5310 Souvenir

http://acm.hdu.edu.cn/showproblem.php?pid=5310 题意:今天是BestCoder一周年纪念日. 比赛管理员Soda想要给每个参赛者准备一个纪念品. 商店里纪念品的单价是p 元, 同时也可以花q 元购买纪念品套装, 一个套装里有m 个纪念品. 今天总共有n 个参赛者, Soda想要知道最少需要花多少钱才可以给每个人都准备一个纪念品. 输入描述 输入有多组数据. 第一行有一个整数T (1≤T≤10 5 ) , 表示测试数据组数. 然后对于每组数据: 一行包

HDU 1326 Box of Bricks(简单数学题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1326 Problem Description Little Bob likes playing with his box of bricks. He puts the bricks one upon another and builds stacks of different height. ``Look, I've built a wall!'', he tells his older siste

hdu 5310 Souvenir (水)

题意:今天是BestCoder一周年纪念日. 比赛管理员Soda想要给每个参赛者准备一个纪念品. 商店里纪念品的单价是p元, 同时也可以花q元购买纪念品套装, 一个套装里有m个纪念品.今天总共有n个参赛者, Soda想要知道最少需要花多少钱才可以给每个人都准备一个纪念品. 思路:3种可能之一,要么不买套装,要么全买套装,要么留下一点点单独买其他买套装. 1 //#include <bits/stdc++.h> 2 #include <iostream> 3 #include <

HDU - 2058 The sum problem(简单数学题)

题意:求出所有的情况,等差上去可以达到m值. 原来想着暴力搜索,但是题中的数据太大,所以时间超限. 百度了一下,发现可以套公式. 等差求和公式: Sn=(a1+aN)*n/2     =(a1+a1+d(n-1))*n/2     =a1*n+d(n-1)*n/2; 因为此处公差d=1,所以Sn=a1*n+(n-1)*n/2,当从第一项开始算起时(因本题首项为1,即a1=1时),Sn=M时的项的个数n最多; a1=1,现在又可化简为Sn=n+(n-1)*n/2=(n+1)n/2; 由题意得M=S

hdu 2368 Alfredo&#39;s Pizza Restaurant(简单数学题)

转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2368 题目很简单,但是比较恶心,用sqrt WA到死也不过,不用秒过: 忍不住吐槽一下; Problem Description Traditionally after the Local Contest, judges and contestants go to their favourite restaurant,

HDU 6467 简单数学题 【递推公式 &amp;&amp; O(1)优化乘法】(广东工业大学第十四届程序设计竞赛)

传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6467 简单数学题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 308    Accepted Submission(s): 150 Problem Description 已知 F(n)=∑i=1n(i×∑j=inCij) 求 F(n) m

hdu2374 A Game with Marbles(简单数学题)

转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2374 Problem Description There are n bowls, numbered from 1 to n. Initially, bowl i contains mi marbles. One game step consists of removing one marble from a bowl.