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 <iostream> #include <cstring> #include <algorithm> #include <cstdio> using namespace std; int main() { int T; cin >> T; int n, m, p, q; int ans; while(T--) { ans = 0; cin >> n >> m >> p >> q; int zu = n / m; int yu = n % m; if(zu == 0) { ans = min(yu*p, q); } else { if(yu == 0) { ans = min(zu * q, n * p); } else { ans = min(zu * q + yu * p, min((zu + 1)* q , n * p)); } } cout << ans << endl; } return 0; }
Hidden String
Accepts: 437
Submissions: 2174
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, gets a string ss of length nn. He wants to find three nonoverlapping substrings s[l_1..r_1]s[l?1??..r?1??], s[l_2..r_2]s[l?2??..r?2??], s[l_3..r_3]s[l?3??..r?3??] that:
- 1 \le l_1 \le r_1 < l_2 \le r_2 < l_3 \le r_3 \le n1≤l?1??≤r?1??<l?2??≤r?2??<l?3??≤r?3??≤n
- The concatenation of s[l_1..r_1]s[l?1??..r?1??], s[l_2..r_2]s[l?2??..r?2??], s[l_3..r_3]s[l?3??..r?3??] is "anniversary".
Input
There are multiple test cases. The first line of input contains an integer TT (1 \le T \le 100)(1≤T≤100), indicating the number of test cases. For each test case:
There‘s a line containing a string ss (1 \le |s| \le 100)(1≤∣s∣≤100) consisting of lowercase English letters.
Output
For each test case, output "YES" (without the quotes) if Soda can find such thress substrings, otherwise output "NO" (without the quotes).
Sample Input
2 annivddfdersewwefary nniversarya
Sample Output
YES NO
#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; }