1 条题解

  • 2
    @ 2023-2-18 10:54:37
    #include<bits/stdc++.h>
    #define int long long
    using namespace std;
    int n;//兵营数
    int c[100005];//c[i] i号兵营的工兵数
    int m,p1,s1,s2; 
    signed main() 
    {
    	cin>>n;
    	for(int i=1;i<=n;i++)
    		cin>>c[i];
    	cin>>m>>p1>>s1>>s2;
    	c[p1]+=s1;//直接把p1号兵营加上s1个人
    	//计算没有s2个人的情况
    	int left,right;
    	left=right=0;
    	for(int j=1;j<=m-1;j++){
    		left+=c[j]*(m-j);
    	}	
    	for(int j=m+1;j<=n;j++){
    		right+=c[j]*(j-m);
    	}	 
    	//考虑把s2个人放在哪个兵营最合适
    	int minn=abs(left-right),mini=m; //初始认为放在m号兵营最合适 
    	for(int i=1;i<=n;i++)
    	{
    		//考虑把s2个人放在i号兵营
    		int newLeft = left;
    		int newRight = right;
    		if(i<m)
    			newLeft += (m-i)*s2;
    		else
    			newRight += (i-m)*s2; 
    		//找到了答案 
    		if(abs(newLeft-newRight)<minn){
    			minn=abs(newLeft-newRight);
    			mini=i;
    		}
    	} 
    	cout<<mini<<endl; 
    	return 0;
    }
    
    • 1

    信息

    ID
    116
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    56
    已通过
    23
    上传者