Оптимальный способ максимизировать, чтобы clan1 выиграл - PullRequest
0 голосов
/ 15 апреля 2020

Есть 2 клана, clan1 и clan2.Мы получили полномочия этих двух воинов кланов в массивах в виде двух массивов, таких как P1, P2, ..., PN и C1, C2, ....., CN. Мы хотим, чтобы клан 1 выиграл войну. Какое максимальное количество боев может выиграть команда Клан 1, когда ее воины расположены оптимально или сражаются в оптимальном порядке. как: нет. воинов = 10, полномочия 1- 1,2,3,4,5, силы второго- 0,1,3,2,6

so max wins clan1 can win = 4.

в чем проблема в моем коде

#no.of warriors n
int n;
    scanf("%d",&n);
#powers of warriors
 int *p1 = new int(n);
 int *p2 = new int(n);
 for(int i=0 ; i<n;i++){
   scanf("%d",&p1[i]);
 }
 for(int i=0 ; i<n;i++){
    scanf("%d",&p2[i]);
 }

 selectionSort(p1,n);
 selectionSort(p2,n);

 int i=0 , j=0,sum=0;
 while(i<n&&j<n){
     while(p1[i]<=p2[j]){
         j++;
     }
     sum++;
     i++;
 }
printf("%d", sum);

ограничения;

no.of warriors <=100000
power<= LLONG_MAX

1 Ответ

0 голосов
/ 15 апреля 2020

У вас проблемы с кодом.

  • Вы используете selectionSort, но оно не определено. Вы можете использовать std::sort из algorithm
  • Вы динамически распределяете память, но не очищаете. Это может привести к утечке памяти. Вы можете использовать std::vector, чтобы избежать этой проблемы.
  • Внутреннее время, пока l oop может go вне границ. Вы должны проверить границы
  • Лог c был неправильным (или, по крайней мере, я не смог это исправить). Я перевернул логику c внутреннего, пока l oop.
#include <algorithm>
#include <cstdio>
#include <vector>

int main() {
    int n;
    std::scanf("%d", &n);

    std::vector<int> clan1(n);
    for(auto &warrior : clan1){
        std::scanf("%d", &warrior);
    }
    std::vector<int> clan2(n);
    for(auto &warrior : clan2){
        std::scanf("%d", &warrior);
    }

    std::sort(std::begin(clan1), std::end(clan1));
    std::sort(std::begin(clan2), std::end(clan2));

    int i = 0, j = 0, sum = 0;
    while(i < n && j < n) {
        while(j < n && i < n && clan1[i] > clan2[j]) {
            i++;
            j++;
            sum++;
        }
        ++i;
    }
    std::printf("%d", sum);
}
...