Codeforces Round #735 (Div. 2) B.Cobb(角度奇特的思维题)

Posted Lnn.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #735 (Div. 2) B.Cobb(角度奇特的思维题)相关的知识,希望对你有一定的参考价值。

前言:思维题orz orz


题目传送门

B.Cobb
  题目类型:暴力,思维。
  解析:首先我们可以注意到k的取值很小,但是整体看下来无法从式子:i⋅j−k⋅(ai|aj)的特性来找到突破口。
  于是我们考虑化简题目,去掉k,式子变为:i⋅j−(ai|aj),此时有一个结论,直接取i=n-1,j=n
  正确性:我们先假设i=n-1,j=n,因为ai <= n ,所以ai|aj - ai <= n,此时如果i变成n-2,对于(ixj)来说下降了n,而对于−(ai|aj)最多上升n,极限情况下总和保持不变,i如果再变小,绝对是亏的;而j变成n-2,(ixj)下降2*(n-1),血亏。意味着i、j任意一个变小,对于答案都是不会增加的,所以k=1时,取n-1与n。
  而k最多可以到100,意味着−(ai|aj)最多带来100n的提升,也就是ixj最多可以忍受100n的下降,所以只要枚举后101个,暴力k2匹配即可。
  code:

#include <bits\\stdc++.h>

using namespace std;

long long t,n,k,a[101010];

int main()
{
    ios::sync_with_stdio(false);
    cin >> t ;
    while(t--){
        cin >> n >> k ;
        for(int i = 1 ; i <= n ; ++i)
            cin >> a[i] ;
        long long ans = -2e14;
        for(int i = max((long long)1,n-102) ; i <= n ; ++i)
            for(int j = i+1 ; j <= n ; ++j)
                ans = max((long long)i*j-k*(a[i]|a[j]) , ans);
        cout << ans << endl ;
    }
    return 0;
}

以上是关于Codeforces Round #735 (Div. 2) B.Cobb(角度奇特的思维题)的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #735 (Div. 2)-C. Mikasa-题解

Codeforces Round #735 (Div. 2)-B. Cobb-题解

Codeforces Round #735 (Div. 2)-A. Cherry-题解

Codeforces Round #735 (Div. 2)-C. Mikasa-题解

Codeforces Round #735 (Div. 2)-B. Cobb-题解

Codeforces Round #735 (Div. 2)-A. Cherry-题解