专栏文章

P14178 Jueves题解

P14178题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minnv40f
此快照首次捕获于
2025/12/02 05:28
3 个月前
此快照最后确认于
2025/12/02 05:28
3 个月前
查看原文

P14178 Jueves题解

- 前置知识

  1. aandb=aba \operatorname{and} b= a \lor b;
  2. aorb=aba \operatorname{or} b=a \land b;
  3. axorb=ab=ababa \operatorname{xor} b=a\oplus b=a \lor b - a \land b;

- 公式推导

aandb+aorb+axorba \operatorname{and} b+a \operatorname{or} b+a \operatorname{xor} b=

ab+ab+ababa \lor b+a \land b+a \lor b - a \land b=

2×(ab)2\times (a \lor b);

- 结论

ab+ab+ab=2×(ab)=2×aba\oplus b+a \lor b+a \land b=2 \times(a \lor b)=2 \times a \mid b ; (按位或)
  • 注意!!!题目中的0ai10180\le a_i\le 10^{18},且对于任意的au,ava_u,a_v,都有ab+ab+ab=2×(ab)=2×ab0a\oplus b+a \lor b+a \land b=2 \times(a \lor b)=2 \times a \mid b \ge 0, 所以sstt最小贡献就是2×(a[u]+a[t])2\times(a[u]+a[t]) ( 若s=ts=t,则贡献为0 ).
  • 代码如下
CPP
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+5;
ll T,n,s,t,i,j;
ll a[N];
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(nullptr);
	cout.tie(nullptr);
	cin>>T;
	while(T--)
	{
		cin>>n>>s>>t;
		for(i=1;i<=n;i++) cin>>a[i];
		if(s==t){
			cout<<0<<'\n';continue;
		}
		cout<<2*(a[s]|a[t])<<'\n';
	}
	return 0;
}
QwQ

评论

0 条评论,欢迎与作者交流。

正在加载评论...