52分求助
查看原帖
52分求助
532586
鲁锦聪楼主2021/10/9 19:02
#include<bits/stdc++.h>
using namespace std;
const int MS = 1e5 + 5;
int l,h,mi = 1e9,ans;//l:龙势力,h:虎势力,mi:最小差距,ans:答案 
int n,m;
int s1,s2,p1;
int c[MS];
void v_long(int m){
    for(int i = 1;i < m;i++)
        l += c[i] * (m - i);
}//龙势力 
void v_hu(int m,int n){
    for(int i = n;i > m;i--)
        h += c[i] * (i - m);                
}//虎势力 
void s_long(int m){
    for(int i = 1;i < m;i++)
        if(abs(h - (l + s2 * (m - i))) < mi){
            mi = abs(h - (l + s2 * (m - i)));
            ans = i;
        }
    cout << ans;
}//天降神兵(s2)后龙势力 ;求答案 
void s_hu(int m,int n){
    for(int i = n;i > m;i--)
        if(abs(l - (h + s2 * (i - m))) < mi){
            mi = abs(l - (h + s2 * (i - m)));
            ans = i;
        }
    cout << ans;
}//天降神兵(s2)后虎势力;求答案 
int main(){
    cin >> n;//兵营数量 
    for(int i = 1;i <= n;i++)
        cin >> c[i];//每个兵营的人数 
    cin >> m >> p1 >> s1 >> s2;//m兵营,天降神兵s1的点,天降神兵s1数量,天降神兵s2数量 
    c[p1] += s1;//将天降神兵s1数量加到点p1 
    v_long(m);//计算龙势力 
    v_hu(m,n);//计算虎势力 
    if(l > h)//龙势力比虎势力多 
        s_hu(m,n);//s2加到虎势力 
    else if(h > l)//虎势力比龙势力多 
        s_long(m);//s2加到龙势力 
    else//如果一样 
        cout << m;//加到m兵营 
    return 0;
} 
2021/10/9 19:02
加载中...