您的位置:首页 > 其它

BC一周年练习赛

2015-07-26 14:51 281 查看

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 $p$ yuan and the price for a set of souvenirs if $q$ yuan. There's $m$ souvenirs in one set. There's $n$ 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 $T$ $(1 \le T \le 10^5)$, indicating the number of test cases. For each test case: There's a line containing 4 integers $n, m, p, q$ $(1 \le n, m, p, q \le 10^4)$.

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.

有点贪心的意味,整套买省钱的尽量整套买,不能整套买的,看一整套与单个买哪个省钱。然而终测没过,然后交,并没有终测数据。。。

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
char str[110];
char const s[] = "anniversary";
int vis[110];
int len, h;
bool dfs(int a, int b) {
h++;
int i, j, k;
for(i = a; i < len; ++i) {
k = b;
if(str[i] == s[k]) {
k++;
for(j = i+1; j < len; ++j) {
if(str[j] != s[k])
break;
k++;
}
if(s[k] == '\0' && h<=3)
return true;
if(dfs(j, k)) {
return true;
}
}
}
h--;
return false;
}

int main() {
int T;
scanf("%d%*c", &T);
while(T--) {
gets(str);
len = strlen(str);
h = 0;
if(dfs(0, 0))
cout << "YES" << endl;
else
cout << "NO" << endl;
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: