此题N和K的值较小,关键在于Ai的值最大是个5e5,实想一下k个这么大的值相加long long类型都无法储存。所以考的是大数加法。代码如下:
#include<iostream>
#include<vector>
#include<string.h>
using namespace std;
#define N 10001
//大数相加函数
string fun1(string x,string y)
{
string s;
int len1=x.size()-1;
int len2=y.size()-1;
int flag=0;
while(len1>=0||len2>=0||flag>0)
{
int num1=len1<0?0:x[len1]-'0';
int num2=len2<0?0:y[len2]-'0';
int sum=num1+num2+flag;
flag=sum/10;
s.insert(s.begin(),sum%10+'0');
len1--;
len2--;
}
return s;
}
int main()
{
string a[N];
int n,k;
cin>>n>>k;
for(int i=0;i<n;i++)
cin>>a[i];
while(k--)
{
string minl="500001";
int t;
for(int i=0;i<n;i++)
{
if(a[i].size()<minl.size()||(a[i].size()==minl.size()&&a[i]<minl))
{
minl=a[i];
t=i;
}
}
if(t+1<n)
a[t+1]=fun1(a[t+1],a[t]);
if(t-1>=0)
a[t-1]=fun1(a[t-1],a[t]);
for(int i=t;i<n-1;i++)
a[i]=a[i+1];
n--;
}
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
return 0;
}