首页 > 其他分享 >ABC263

ABC263

时间:2022-10-16 22:55:58浏览次数:60  
标签:min sum cin times ABC263 数组

ABC263

img

tasks

VP

score A B C D E F G
105:02 0:24 4:11 15:03 38:49 85:02
+4 +1 +1 +2

rk:\(316th\)
perf:\(\color{Gold}{2012}\)

A、B

忽略。

C

就是记一下 next_permutation 这个函数。
或者爆搜也行。

void work(){
  cin>>n>>m;vi f;
  L(i,1,n) f.pb(0);
  L(i,1,m-n) f.pb(1);
  do{
    L(i,0,m-1) if(!f[i]) 
      cout<<i+1<<" ";
    cout<<'\n';
  }while(next_permutation(all(f)));
}

D

稍微分类讨论一下,把问题转化成更为更加可解的情况。

  • 如果整个数组 \(a\) 都被覆盖

此时答案显然是 \(\min(L,R) \cdot n\)。

  • 如果数组不是完全覆盖

中间必然有一段 \(\left[ l,r \right]\) 没有被改变。
考虑一个前缀和数组 \(s_i = \sum_{j=1}^i a_j\),此时的答案为 $$s_r -s_{l-1}+R \times (n-r) +L \times (l-1)$$

所以枚举左端点 \(l\) 和后缀最小和 \(s_{l} + R \times (n-r)\) 并更新答案即可。

void work(){
  cin>>n>>x>>y;
  L(i,1,n) cin>>a[i],s[i]=a[i]+s[i-1];
  R(i,n,0){
    sum=min(sum,s[i]+y*(n-i));
    ans=min(ans,x*i-s[i]+sum);
  }cout<<ans;
}

img

标签:min,sum,cin,times,ABC263,数组
From: https://www.cnblogs.com/AIskeleton/p/16797518.html

相关文章