@leean

Задача на codeforces на проходит по времени?

не проходит по времени, не знаю что делать вообще. Задача рассчитана на жадный алгоритм.
https://codeforces.com/problemset/problem/1132/B
#include <bits/stdc++.h>
using namespace std;
int main ()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    vector<long long> a,b;
    long long i,j,k,n,m,l=0;
    cin>>n;

    for(i=0;i<n;++i){
        cin>>k;
        a.push_back(k);
    }
    cin>>m;

    for(i=0;i<m;++i){
        cin>>k;
        b.push_back(k);
    }

    sort(a.begin(),a.end());

    for(i=0;i<m;++i){
        for(j=n-b[i];j<n;++j){
            l=l+a[j];
        }
        l=l-a[n-b[i]];
        for(j=0;j<n-b[i];++j){
            l=l+a[j];
        }
        cout<<l<<endl;
        l=0;
    }
    return 0;
}
  • Вопрос задан
  • 83 просмотра
Решения вопроса 1
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, экс-олимпиадник.
У вас решение за O(NM), когда как есть решение за O(N+M).

Вы считаете сумму всех цен каждый раз. Но это делать не обязательно, ведь вам надо найти сумму всех цен, кроме одной. Можно подсчитать сумму всех один раз и потом вычитать из нее лишнюю цену (но надо аккуратно подумать о переполнениях). Или можно воспользоватся префиксными и постфиксными суммами.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы