Souvenir
Accepts: 901
Submissions: 2743
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 262144/262144 K (Java/Others)
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 pp yuan and the price for a set of souvenirs if qq yuan. There's mm souvenirs in one set.
There's nn 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 TT (1 le T le 10^5)(1≤T≤105), indicating the number of test cases. For each test case:
There's a line containing 4 integers n, m, p, qn,m,p,q (1 le n, m, p, q le 10^4)(1≤n,m,p,q≤104).
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.

1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 using namespace std; 5 int main() 6 { 7 int T,n,m,p,q,i,j,k; 8 scanf("%d",&T); 9 while(T--) 10 { 11 scanf("%d %d %d %d",&n,&m,&p,&q); 12 if((double) p<= (double)q/m) 13 { 14 printf("%d ",n*p); 15 } 16 else 17 { 18 int x=0; 19 for(i=1;;i++) 20 { 21 x=x+m; 22 if(x>=n) 23 break; 24 } 25 printf("%d ",min(i*q,(i-1)*q+(n-(x-m))*p)); 26 } 27 } 28 return 0; 29 }