给定一个长度为 N 的整数数列:A1, A2, . . . , AN。你要重复以下操作 K 次:
每次选择数列中最小的整数(如果最小值不止一个,选择最靠前的),将其删除。并把与它相邻的整数加上被删除的数值。输出 K 次操作后的序列。
#include <iostream>
#include<bits/stdc++.h>
#define int long long
#define INF 0x3f3f3f3f3f3f3f
using namespace std;
const int N=1e5+10;
int a[N];
bool st[N];
void solve(){
int n,k;
cin>>n>>k;
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<k;i++)
{
int pos=-1;
int min=INF;
for(int j=0;j<n;j++)
{
if(a[j]<min &&!st[j])
{
min=a[j];
pos=j;
}
}
st[pos]=true;
for(int i=pos-1;i>=0;i--)
{
if(!st[i]){
a[i]+=min;
break;
}
}
for(int i=pos;i<n;i++)
{
if(!st[i]){
a[i]+=min;
break;
}
}
}
for(int i=0;i<n;i++)
{
if(!st[i])
{
cout<<a[i]<<" ";
}
}
}
signed main()
{
// 请在此输入您的代码
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t=1;
//cin>>t
while(t--)
solve();
}