求调56分,抱歉码风可能比较丑
查看原帖
求调56分,抱歉码风可能比较丑
1003901
Angela2022楼主2023/10/20 12:34
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define int long long
const ll MAXN=1e15;
ll ctl,cth;
long long s[100010],ch[100010];
signed main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>s[i];
	}
	int m,p,x,y;
	cin>>m>>p>>x>>y;
	//统计各自气势值
	for(int i=1;i<m;i++){
	    ctl+=s[i]*(m-i);
	}
	for(int i=m+1;i<=n;i++){
	    cth+=s[i]*(i-m);
	}
	if(p<m)ctl+=x*(m-p);
	else if(p>m)cth+=x*(p-m);
//	cout<<cth<<" "<<ctl<<endl;
	//看哪一方气势小,就把这些士兵放到哪一方,枚举这一方里的每个位置
	if(ctl==cth){
		cout<<m<<endl;
		return 0;
	}
//	cout<<cth-ctl<<endl;
	ll mmin=MAXN;
	if(ctl<cth){
		mmin=cth-ctl;
		for(int i=1;i<m;i++){
//			cout<<y<<" "<<(m-i)<<"   ";
			if(y*(m-i)<=cth-ctl){
			    mmin=min(mmin,cth-ctl-y*(m-i));
			    ch[i]=cth-ctl-y*(m-i);
			    //cout<<mmin<<" ";
//			    cout<<mmin<<" "<<ch[i]<<endl;
			}
			else{
				mmin=min(mmin,y*(m-i)+cth-ctl);
				ch[i]=y*(m-i)+cth-ctl;
//				cout<<mmin<<" "<<ch[i]<<endl;
			}
		}
	} 
	else{
		mmin=ctl-cth;
		for(int i=m+1;i<=n;i++){
			if(y*(n-m)<=ctl-cth){
			    mmin=min(mmin,ctl-cth-y*(n-m));
			    ch[i]=ctl-cth-y*(n-m);
//			    cout<<mmin<<" "<<ch[i]<<endl;
			}
			else{
				mmin=min(mmin,y*(n-m)+ctl-cth);
				ch[i]=y*(n-m)+ctl-cth;
//				cout<<mmin<<" "<<ch[i]<<endl;
			}
		}
	}
//	cout<<mmin<<endl;
	for(int i=1;i<=n;i++){
		if(ch[i]==mmin){
			cout<<i<<endl;
			return 0;
		}
	}
	cout<<m<<endl;
	return 0;
}
2023/10/20 12:34
加载中...