CSES Problem Set
Stick Divisions Solution
You have a stick of length and you want to divide it into sticks, with given lengths, whose total length is .
On each move you can take any stick and divide it into two sticks. The cost of such an operation is the length of the original stick.
What is the minimum cost needed to create the sticks?
Input
The first input line has two integers and : the length of the stick and the number of sticks in the division.
The second line has integers : the length of each stick in the division.
Output
Print one integer: the minimum cost of the division.
Constraints
Input:
Output:
Explanation: You first divide the stick of length into sticks of length and (cost ). After this, you divide the stick of length into sticks of length and (cost ). The total cost is .
On each move you can take any stick and divide it into two sticks. The cost of such an operation is the length of the original stick.
What is the minimum cost needed to create the sticks?
Input
The first input line has two integers and : the length of the stick and the number of sticks in the division.
The second line has integers : the length of each stick in the division.
Output
Print one integer: the minimum cost of the division.
Constraints
Input:
8 3
2 3 3
Output:
13
Explanation: You first divide the stick of length into sticks of length and (cost ). After this, you divide the stick of length into sticks of length and (cost ). The total cost is .
#include <bits/stdc++.h>
using namespace std;
#define int long long int
#define F first
#define S second
#define pb push_back
#define si set <int>
#define vi vector <int>
#define pii pair <int, int>
#define vpi vector <pii>
#define vpp vector <pair<int, pii>>
#define mii map <int, int>
#define mpi map <pii, int>
#define spi set <pii>
#define endl "\n"
#define sz(x) ((int) x.size())
#define all(p) p.begin(), p.end()
#define double long double
#define que_max priority_queue <int>
#define que_min priority_queue <int, vi, greater<int>>
#define bug(...) __f (#__VA_ARGS__, __VA_ARGS__)
#define print(a) for(auto x : a) cout << x << " "; cout << endl
#define print1(a) for(auto x : a) cout << x.F << " " << x.S << endl
#define print2(a,x,y) for(int i = x; i < y; i++) cout<< a[i]<< " "; cout << endl
inline int power(int a, int b)
{
int x = 1;
while (b)
{
if (b & 1) x *= a;
a *= a;
b >>= 1;
}
return x;
}
template <typename Arg1>
void __f (const char* name, Arg1&& arg1) { cout << name << " : " << arg1 << endl; }
template <typename Arg1, typename... Args>
void __f (const char* names, Arg1&& arg1, Args&&... args)
{
const char* comma = strchr (names + 1, ',');
cout.write (names, comma - names) << " : " << arg1 << " | "; __f (comma + 1, args...);
}
const int N = 200005;
void solve() {
int x,n;
cin>>x>>n;
priority_queue<int,vector<int>,greater<int>>pq;
for (int i = 0; i < n; i++)
{
int y;cin>>y;
pq.push(y);
}
int ans=0;
while(pq.size()>1){
int a=pq.top();
pq.pop();
int b=pq.top();
pq.pop();
ans+=a+b;
pq.push(a+b);
}
cout<<ans<<endl;
}
int32_t main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
clock_t z = clock();
int t = 1;
// cin >> t;
while (t--) solve();
return 0;
}
0 Comments
If you have any doubts/suggestion/any query or want to improve this article, you can comment down below and let me know. Will reply to you soon.