首页 > 其他 > 详细

Codeforces Round #688 (Div. 2)

时间:2020-12-05 09:28:25      阅读:39      评论:0      收藏:0      [点我收藏+]

A. Cancel the Trains

去重,重复才会相撞

B. Suffix Operations

后缀+1,后缀-1

操作前可以改变一个值。

求最少操作数使得数列相同。

很明显是差分。差分数组和就是操作数。

当我们改变一个数列中间的值时,最优肯定是改成与前面相同的情况。(与后面相同也行,差分数组是一样的。

当前情况,ci改变为0,ci+1改变为a+1  -   a-1

特殊的,改变a1,那么只有c2改变为0
特殊的,改变an,那么只有cn改变为0

取最优情况记录。

最后差分求和。

ll a[N],n,m,x,c[N];
int main(){
    int t;cin>>t;
    while(t--){
        scanf("%lld",&n);
        for(int i=1;i<=n;++i){
            scanf("%lld",&a[i]);
        }
        ll ans=0,re=-1,pos=0,now;
        for(int i=1;i<=n;++i)
            c[i]=a[i]-a[i-1];
        for(int i=2;i<n;++i){
            ll pre=fabs(c[i])+fabs(c[i+1]);
            ll now=fabs(a[i+1]-a[i-1]);
            if(pre-now>re){
                re=pre-now;pos=i;
            }
        }
        ll now1=fabs(c[2]);
        ll now2=fabs(c[n]);
        if(re>=now1&&re>=now2){
            c[pos]=0;c[pos+1]=a[pos+1]-a[pos-1];
        }
        else if(now1>=re&&now1>=now2){
            c[2]=0;
        }
        else if(now2>=re&&now2>=now1){
            c[n]=0;
        }
        for(int i=2;i<=n;++i)    ans=ans+fabs(c[i]);
        cout<<ans<<endl;
    }
    return 0;
}

C. Triangles

矩阵中找三个相同值的点,凑一个三角形,要求面积最大。三角形有一边垂直或

值范围为0-9,都要输出

存入的时候,把每个值能到达的左上,右上,左下,右下都储存下来。

当前值点数小于2的没有三角

跑一遍矩阵,找当前点值能在四个方向上凑出的最大值。

 

Codeforces Round #688 (Div. 2)

原文:https://www.cnblogs.com/PdrEam/p/14088267.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!