Решение задачи Разбиение на части с Acmp

Без пояснения   Просмотров: 348


Необходимо представить целое число N в виде суммы M примерно равных целых чисел. Будем считать, что числа примерно равны, если они отличаются друг от друга не более чем на единицу.

Код

#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    int n, m, s = 0;
    cin >> n >> m;
    vector<int> a;
    if(n < m){
        for(int i = 0; i < m - n; ++i)
            cout << 0 << " ";
        for(int i = 0; i < n; ++i)
            cout << 1 << " ";
        return 0;
    }
    for(int i = 0; i < m; ++i){
        a.push_back(n / m);
    }
 
    for(int i = 0; i < a.size(); ++i){
        for(int j = 0; j < a.size(); ++j)
            s+=a[j];
        if(s==n)
            break;
        else
            s = 0;
        a[i]+=1;
    }
    sort(a.begin(), a.begin() + a.size());
    for(int i = 0; i < a.size(); ++i)
        cout << a[i] << " ";
    return 0;
}

         

Администратор Photo Автор: Администратор


Код

#include <bits/stdc++.h>
using namespace std;
int main(){
int n, m;
cin >> n >> m;
int a = n / m;
int b = (n + m - 1) / m;
vector<int>ans;
int sum = 0;
for (int i=0; i < n % m; i++){
ans.push_back(b);
sum+=b;
}
m -= n % m;
while(m--){
ans.push_back(a);
}
sort(ans.begin(),ans.end());
for (int u : ans)
cout << u << ' ';
return 0;
}

         

Tested Photo Автор: Tested




Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться