На форумі обговорюються лише питання, пов'язані з олімпіадою
Ви не зайшли.
Пропоную не чекати пів року а ділитись розв'язками тут.
Алгоритм:
Добуток найбільший, якщо числа однакові.
Якщо числа різні, то зробимо різницю між ними мінімальною, тобто: 1
#include <iostream>; using namespace std; int main() { int n,k; cin >> n >> k; int max = n/k;//якщо можна розбити на однакові доданки, то яким буде значення такого доданку int ost = n%k;//скільки буде чисел більших від max int cel = k-ost;//скільки буде чисел, що дорівнюють max for (int i=0; i<cel; i++) cout << max << " "; for (int i=0; i<ost; i++) cout << max+1 << " "; return 0; }
Відредаговано LVV (2020-11-08 12:38:01)
Поза форумом
#include <stdio.h> #include<vector> #include<algorithm> using namespace std; //Complexity: O(k) int main() { int n, k; scanf("%d%d", &n, &k); vector<int> a(k); for(int i=0; i<k; i++)a[i]=n/k; for(int i=0; i<n%k; i++)a[i]++; reverse(a.begin(), a.end()); for(int i=0; i<k; i++)printf("%d ", a[i]); return 0; } //Это моё творчество. Идея та же.
Відредаговано GeniusDP (2020-11-08 17:34:19)
Поза форумом
#include <cstdio> using std::scanf; using std::printf; int main() { int k,n; scanf("%d%d",&n,&k); for(int i=0;i<k;++i) printf("%d ",(n+i)/k); return 0; }
Поза форумом
(n+i)/k
это просто прекрасно!
Моё решение (python 2.7)
n, k = map(int, raw_input().split()) q, r = n/k, n%k print ' '.join([str(q)]*(k-r)+[str(q+1)]*r)
Поза форумом