1 条题解

  • 1
    @ 2022-9-2 22:03:53
    #include "iostream"
        #include "stdio.h"
        #include "algorithm"
        #define II int
        #define LO long long
        #define R register
        #define I 123456
        using namespace std;
        
        
        II t,n;
        
        LO d;
        
        LO a[I], b[I];
        
        LO gg(R LO x) { return x<0 ? -x : x ; }
        
        LO smaler(R LO a,R LO b) { return a<b ? a : b ; }
        
        
        int main()
        {
            scanf("%d",&t);
            while (t--) {
                scanf("%d%lld",&n,&d);
                for(R II i=1;i<=n;i++) scanf("%lld",&a[i]);
                
                if(gg(a[n]-a[1])>d*(n-1)) {
                    printf("impossible\n");
                    continue ;
                }
                
                b[1]=a[1];
                for(R II i=2;i<=n;i++) b[i]=b[i-1]-d; 
                
                while (b[n]!=a[n]) {
                    R LO low=0,up=0,wei,oo=-1e18,op=1e18, ko=0;
                    for(R II i=n;i>1;i--)
                    {
                        a[i]>b[i] ? low++ : up++ ;     
                        if(a[i]>b[i]) {
                            op=smaler(op,a[i]-b[i]);
                        } 
                        if(low-up>=oo && b[i-1]+d!=b[i]) {
                            oo=low-up;
                            wei=i;
                            ko=op;
                        }
                    }
                    
                    ko=smaler(ko,b[wei-1]+d-b[wei]);
                    for(R II i=wei;i<=n;i++) b[i]+=ko;
                }
                
                R LO ans=0;
                for(R II i=1;i<=n;i++) ans+=gg(a[i]-b[i]);
                printf("%lld\n",ans); 
            }
            exit(0);
        }
    
    • 1

    信息

    ID
    2138
    时间
    1000ms
    内存
    125MiB
    难度
    6
    标签
    递交数
    1
    已通过
    1
    上传者