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-题解