最后五个点,80
查看原帖
最后五个点,80
415007
Logic_Steve_sans楼主2022/9/17 13:16

如题,最后五个点过不去, 调不出来



#include<iostream>
#include <cstdio>
#include<cstring>
#include<stdlib.h>
using namespace std;

int main(){
    long long c[100010], n, m, p, s1, s2, qs1 = 0, qs2 = 0, num = 0, minnum = 9223372036854775806;
    cin>>n;
    for(long long i = 0;i<n;i++){
        cin>>c[i];
    }
    cin>>m;
    m-=1;
    cin>>p>>s1;
    p -= 1;
    c[p] += s1;
    for(long long i = 0;i<=n;i++){
        if(i<m){
            qs1 += (m-i)*c[i];//计算龙,虎气势 
        }
        if(i>m){
            qs2 += (i-m)*c[i];
        }

    }

    cin>>s2;
    long long psm1 = 0;//最小气势 差所放的军营 
    /* 
    if(n >= 99999){
        for(long long j = 0;j<=n;j++){  
            if(j<m){
                num = abs((qs1+s2*(m-j))-qs2);
                if(num<minnum){
                    minnum = num;
                    psm1 = j; 
                }
            }else if(j > m){
                num = abs((qs2+s2*(j-m))-qs1);
                if(num<minnum){
                    minnum = num;
                    psm1 = j; 
                }
            }
        }
        cout<<psm1+1;//这部分能过后五个点,前面几个点过不了 
    }
    */
    if(m<=n/2){
        for(long long j = 0;j<=n;j++){//枚举每一点,龙 
            num = abs((qs1+s2*(m-j))-qs2);//当前军营气势差 
            if(num<minnum){
                minnum = num;
                psm1 = j; 
            }
        }
    }
    if(m>n/2){
        for(long long j = 0;j<=n;j++){  //枚举每一点,虎 
            num = abs((qs2+s2*(j-m))-qs1); //当前军营气势差 
            if(num<minnum){
                minnum = num;
                psm1 = j; 
            }
        }
    }
    cout<<psm1+1;
    return 0;

}
2022/9/17 13:16
加载中...