BC一周年练习赛

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.

 

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

BC一周年练习赛
#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;

}
View Code

 

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[l1​​..r1​​], s[l_2..r_2]s[l2​​..r2​​], s[l_3..r_3]s[l3​​..r3​​] that:

  1. 1 \le l_1 \le r_1 < l_2 \le r_2 < l_3 \le r_3 \le n1l1​​r1​​<l2​​r2​​<l3​​r3​​n

  2. The concatenation of s[l_1..r_1]s[l1​​..r1​​], s[l_2..r_2]s[l2​​..r2​​], s[l_3..r_3]s[l3​​..r3​​] is "anniversary".

Input

There are multiple test cases. The first line of input contains an integer T(1 \le T \le 100)(1T100), indicating the number of test cases. For each test case:

There's a line containing a string s(1 \le |s| \le 100)(1s100) 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
BC一周年练习赛
#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

 

你可能感兴趣的:(bc)