其他分享
首页 > 其他分享> > CSUST 白银御行想展示 题解(思维)

CSUST 白银御行想展示 题解(思维)

作者:互联网

题目链接

题目思路

第一数不是1就是n,可以确定他放哪里最优

如果他是1,那么第二个点不是2 就是n

如果他是2,那么第二个点不是1就是n-1

for一边即可确定答案

代码

#include<bits/stdc++.h>
#define fi first
#define se second
#define debug cout<<"I AM HERE"<<endl;
using namespace std;
typedef long long ll;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int maxn=1e6+5,inf=0x3f3f3f3f,mod=1e9+7;
const double eps=1e-6;
int n,k;
ll a[maxn],b[maxn],suf[maxn];
signed main(){
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++){
        scanf("%lld",&a[i]);
    }
    for(int i=1;i<=n;i++){
        scanf("%lld",&b[i]);
    }
    for(int i=n;i>=1;i--){
        suf[i]=suf[i+1]+b[i];
    }
    int beg=1,ed=n;
    ll pr=0;
    for(int i=1;i<=n;i++){
        ll tmp=(ed-beg)*b[i]-suf[i+1];
        if(tmp>0){
            a[i]-=ed;
            pr+=b[i]*ed;
            ed--;
        }else{
            a[i]-=beg;
            pr+=b[i]*beg;
            beg++;
        }
    }
    printf("%lld\n",pr);
    int _;scanf("%d",&_);
    while(_--){
        int x;scanf("%d",&x);
        printf("%lld\n",a[x]);
        if(a[x]<0){
            printf("I Love Work!");
        }
        printf("\n");
    }
    return 0;
}

标签:pr,int,题解,CSUST,beg,御行,ed,printf,define
来源: https://www.cnblogs.com/hunxuewangzi/p/15397555.html