1 条题解

  • 0
    @ 2023-6-11 12:17:09

    C++ :

    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    long long n,m,p1,s1,s2,sum1,sum2,minn=(long long)1e+20,k,number;
    struct ming
    {
        long long c;//人数
        long long far;//离m点的距离
        long long air;//气势
    }a[100005];//定义结构体,按兵营计数
    void read(long long &x)//输入优化
    {
        long long f=1;x=0;char s=getchar();
        while(s>'9'||s<'0'){if(s=='-') f=-1;s=getchar();}
        while(s>='0'&&s<='9'){x=(x<<3)+(x<<1)+s-'0';s=getchar();}
        x*=f;
    }
    void write(long long x)//输出优化
    {
        if(x<0)
        {
            x=(~x)+1;
            putchar('-');
        }
        if(x>9)
            write(x/10);
        putchar(x%10+'0');
    }
    long long Fabs(long long x)//判断绝对值
    {
        if(x<0)
            return -x;
        return x;
    }
    int main()
    {
        read(n);
        for(long long i=1;i<=n;i++)
            read(a[i].c);
        read(m);read(p1);read(s1);read(s2);
        a[p1].c+=s1;//得到天降神兵的兵营人数增加
        for(long long j=1;j<=n;j++)
        {
            a[j].far=Fabs(j-m);//计算每个兵营离m点的距离
            a[j].air=a[j].far*a[j].c;//计算每个兵营的气势
            if(j<m)
                sum1+=a[j].air;//计算龙方
            if(j>m)
                sum2+=a[j].air;//计算虎方
        }
        if(sum1==sum2)
        {
            write(m);
            return 0; 
        }//如果双方气势一致则放在m营中
        k=0;//k赋初值
        while(k<n)//超过边界退出
        {
            k++;//枚举每个兵营
            long long t,t1;
            if(k==m)
            {
                t=sum1;
                t1=sum2;
    		}//k处于m时双方不变
            if(k<m)
            {
                t=sum1+a[k].far*s2;
                t1=sum2;
            }//小于m时龙方增加
            if(k>m)
            {
                t=sum2+a[k].far*s2;
                t1=sum1;
            }//大于m时虎方增加
            if(Fabs(t-t1)<minn)//计算双方气势之差
            {
                minn=Fabs(t-t1);//最小值
                number=k;//其序号
            }
        }
        write(number);//输出
        return 0;
    }
    
    
    • 1

    信息

    ID
    2357
    时间
    1000ms
    内存
    256MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者