75求调
查看原帖
75求调
1007886
Voltaris楼主2024/10/1 11:28
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
double k[N],num[N],kk;
int lastc,lastn;
int main(){
    int exp,c,n;
    scanf("%d%d%d",&exp,&c,&n);
    int cb=c;
    while(c!=-1&&n!=-1){
        lastc=c,lastn=n;
        num[c]=n;
        scanf("%d%d",&c,&n);
        k[lastc]=(n-lastn)/(c-lastc);
    }
    int x,cc,nn;
    scanf("%d",&x);
    for(int i=cb;i<=lastc;i++){
        if(num[i]==0)num[i]=kk*(i-cc)+nn;
        else cc=i,nn=num[i],kk=k[i];
    }
    while(lastn>x){
        lastc++;
        lastn-=x;
        num[lastc]=lastn;
    }
    int maxx=0,id;
    for(int i=cb;i<=lastc;i++){
        if((i-cb)*num[i]>=maxx){
            maxx=(i-cb)*num[i];
            id=i;
        }
    }
    if(id==exp){
        printf("0");
        return 0;
    }
    if(id>exp){
        for(int bt=1;;bt++){
            maxx=0,id=0;
            for(int i=cb;i<=lastc;i++)if((i-cb+bt)*num[i]>maxx)maxx=(i-cb+bt)*num[i],id=i;
            if(id==exp){
                printf("%d",bt);
                return 0;
            }
        }
    }
    else{
        for(int ss=-1;;ss--){
            maxx=0,id=0;
            for(int i=cb;i<=lastc;i++)if((i-cb+ss)*num[i]>maxx)maxx=(i-cb+ss)*num[i],id=i;
            if(id==exp){
                printf("%d",ss);
                return 0;
            }
        }
    }
    return 0;
}

2024/10/1 11:28
加载中...