求助,15分,是正解思路,不明白错哪了
查看原帖
求助,15分,是正解思路,不明白错哪了
598700
vanderboom楼主2023/7/8 14:40

代码

#define maxn 1000006
#include<iostream>
using namespace std;
int n,w[maxn],s[maxn],ans[maxn],cnt;
//ans是答案序列
long long v;
int stk[maxn],tp;
//stk是答案序列的后半部分(教官回去时出列的),
//答案序列:
//ans[0]->ans[cnt]+stk[tp-1]->stk[0]
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
            scanf("%d",&w[i]);
            s[i]=w[i]+s[i-1];
        }
	for(int i=1;i<=n;i++){
	    if(s[n]-s[i]>=(n-tp-cnt)*w[i]){
   	        ans[cnt]=w[i];
      	        v+=++cnt*w[i];
            }
	    else{
      	        stk[tp]=w[i];
     	        v+=(n-tp++)*w[i];
            }
        }
	cout<<v<<endl;
	for(int i=0;i<cnt;i++)
            printf("%d ",ans[i]);
	while(tp)
            printf("%d ",stk[--tp]);
	return 0;
}

话说没大样例还不让下测试点就离谱

2023/7/8 14:40
加载中...