Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Пожалуйста помогите с задачей на C++

Najmuddin Nargulyew N Ученик (97), на голосовании 3 месяца назад
Голосование за лучший ответ
Юма Куга Знаток (278) 4 месяца назад
алгоритм рабочий, но n=60 не выдерживает, можешь попробовать __int128

#include <bits/stdc++.h>
using namespace std;
using ll=unsigned long long;
int main(){
ll n, k, j=0;
cin >> n >> k;
vector <ll> a(n+1);
for (int i=0; i<=n; i++) a[i]=(1<<i);
if (k>a[n] || k%2==0){
cout << -1;
return 0;
}
vector <pair<ll, ll>> x, y;
for (int i=n; i>=0; i--){
if (a[i]>2*k) x.push_back({a[i], a[i-1]});
else if (a[i]>k) j=i;
else if (a[j]-a[i]<k) x.push_back({a[i], a[i-1]});
else{
y.push_back({a[i], a[j]});
a[j]-=a[i];
}
}
for (auto c:x) cout << c.first << " " << c.second << "\n";
for (auto c:y) cout << c.first << " " << c.second << "\n";
}
Похожие вопросы