蓝桥杯刷题-07-整数删除-暴力

时间:2024-04-06 16:46:51

给定一个长度为 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();

}