Compartilhamento de tecnologia

Codeforces Rodada 957 (Div. 3)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

A. Apenas vantagens

 has three integers 𝑎, 𝑏 and 𝑐 ,has to give Noobish_Monk 𝑎×𝑏×𝑐 bananas.these integers and decided to do the following at most 5 times

escolha um desses inteiros

Aumente em 1

For example, if 𝑎=2, 𝑏=3 and 𝑐=4, then one can increase 𝑎 three times by one and increase 𝑏 two times. After that 𝑎=5, 𝑏=5, 𝑐=4. Then the total number of bananas will be 5×5×4=100.

the maximum value of 𝑎×𝑏×𝑐 

Pensamento ganancioso, cada vez que você encontra o menor número +1, o intervalo de dados é muito pequeno, é diretamente violento.

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define i64 long long
  4. void solve(){
  5. vector<int> a(3);
  6. for(int i = 0; i < 3; i ++) cin >> a[i];
  7. for(int i = 0; i < 5; i ++){
  8. sort(a.begin(), a.end());
  9. a[0] ++;
  10. }
  11. cout << (i64)a[0] * a[1] * a[2] << "n";
  12. }
  13. int main(){
  14. ios::sync_with_stdio(false);
  15. cin.tie(0);
  16. int T;
  17. cin >> T;
  18. while(T--)
  19. solve();
  20. return 0;
  21. }

B. Monge Irritado

 k1o0n has baked an enormous 𝑛 metres long potato casserole. He has cut it into 𝑘 pieces, of lengths 𝑎1,𝑎2,…,𝑎𝑘 meters.k1o0n wasn't keen on that.

  • Pick a piece with length 𝑎𝑖≥2 and divide it into two pieces with lengths 1 and 𝑎𝑖−1. As a result, the number of pieces will increase by 1;
  • Pick a slice 𝑎𝑖 and another slice with length 𝑎𝑗=1 (𝑖≠𝑗) and merge them into one piece with length 𝑎𝑖+1. As a result, the number of pieces will decrease by 1.

For example, if 𝑛=5, 𝑘=2 and 𝑎=[3,2], it is optimal to do the following:

  • Divide the piece with length 2 into two pieces with lengths 2−1=1 and 1, as a result 𝑎=[3,1,1].
  • Merge the piece with length 3 and the piece with length 1, as a result 𝑎=[4,1].
  • Merge the piece with length 4 and the piece with length 1, as a result 𝑎=[5].

find the minimum number of operations he needs to do in order to merge the casserole into one piece with length 𝑛.(2≤𝑛≤10^9, 2≤𝑘≤10^5)

The second line contains 𝑘 integers 𝑎1,𝑎2,…,𝑎𝑘 (1≤𝑎𝑖≤𝑛−1, ∑𝑎𝑖=𝑛) 

Pensamento ganancioso, sempre decompondo números diferentes do maior número

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define i64 long long
  4. void solve(){
  5. int n, k;
  6. cin >> n >> k;
  7. vector<int> a(k);
  8. for(int i = 0; i < k; i ++) cin >> a[i];
  9. sort(a.begin(), a.end());
  10. i64 res = 0;
  11. for(int i = 0; i < k - 1; i ++){
  12. if(a[i] == 1)
  13. res += 1;
  14. else{
  15. res += (a[i] + a[i] - 1);
  16. }
  17. }
  18. cout << res << endl;
  19. }
  20. int main(){
  21. ios::sync_with_stdio(false);
  22. cin.tie(0);
  23. int T;
  24. cin >> T;
  25. while(T--)
  26. solve();
  27. return 0;
  28. }

C. Gorila e Permutação

 three numbers 𝑛, 𝑚, and 𝑘 (𝑚<𝑘).  construct a permutation† of length 𝑛,For the permutation, 𝑔(𝑖) is the sum of all the numbers in the permutation on a prefix of length 𝑖 that são not greater than 𝑚

𝑓(𝑖) is the sum of all the numbers in the permutation on a prefix of length 𝑖 that are not less than 𝑘.

find a permutation for which the value of (∑ni=1f(i)−∑ni=1g(i)) is maximized.(2≤𝑛≤10^5; 1≤m<k≤n)

Faça f() o maior, com o grande na frente, g() o menor, com o pequeno na frente

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define i64 long long
  4. void solve(){
  5. int n, k, m;
  6. cin >> n >> m >> k;
  7. for(int i = 0; i < n - m; i ++){
  8. cout << n - i << " ";
  9. }
  10. for(int i = 0; i < m; i ++)
  11. cout << i + 1 << " n"[i == m - 1];
  12. }
  13. int main(){
  14. ios::sync_with_stdio(false);
  15. cin.tie(0);
  16. int T;
  17. cin >> T;
  18. while(T--)
  19. solve();
  20. return 0;
  21. }

D. Teste de Amor

Decidimos testar esse amor. ErnKor terá que atravessar um rio nadando com um largura de 1 metro ea length of 𝑛 meters.Portanto, no total (isto é, throughout the entire swim from 0 to 𝑛+1) ErnKor pode nadar na água for no more than 𝑘 meters.

They are located at the 0 and 𝑛+1 meters respectively. The river can be represented as 𝑛 segments, each with a length of 1 meter. Each segmentcontém um log 'L', um crocodilo 'C' ou apenas água 'W'. ErnKor pode se mover da seguinte forma:

  • Se ele estiver na superfície (ou seja, no banco ou em um tronco), he can jump forward for no more than 𝑚 (1≤m≤101≤𝑚≤10) meters (he can jump on the bank, on a log, or in the water).
  • Se ele estiver na água, ele só pode nadar até o próximo segmento do rio (or to the bank if he is at the 𝑛-th meter).
  • ErnKor não pode pousar em um segmento com um crocodilo de forma alguma.

p &lt;n Estou preso há muito tempo. Também sou ganancioso. Encontrei o L mais próximo e atualizei-o dinamicamente.

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define i64 long long
  4. void solve(){
  5. int n, m, k;
  6. cin >> n >> m >> k;
  7. string tmp;
  8. cin >> tmp;
  9. string s = " " + tmp;
  10. int p = m;
  11. int i = 1;
  12. while(p <= n){
  13. for(int j = i; j <= p && p <= n; j ++){
  14. if(s[j] == 'L')
  15. p = j + m;
  16. }
  17. if(p > n)
  18. break;
  19. while(p <= n && s[p] == 'W' && k >= 0){
  20. k --;
  21. p ++;
  22. }
  23. if(k < 0 || ( p <= n && s[p] == 'C')){
  24. cout << "No" << endl;
  25. return;
  26. }else
  27. i = p;
  28. }
  29. cout << "Yes" << endl;
  30. }
  31. int main(){
  32. ios::sync_with_stdio(false);
  33. cin.tie(0);
  34. int T;
  35. cin >> T;
  36. while(T--)
  37. solve();
  38. return 0;
  39. }