CF1457 D. XOR-gun(猜结论题)
发布日期:2021-06-30 10:25:02 浏览次数:2 分类:技术文章

本文共 618 字,大约阅读时间需要 2 分钟。

首先造成不递增,必定是存在一个 i i i为中介点

[ l , i ] [l,i] [l,i]的异或大于 [ i + 1 , r ] [i+1,r] [i+1,r]的异或

但这么去枚举 T T T上天

但是发现如果相邻三个数最高位一相同

那么后两个数的异或值一定比前面小

而这些数字只有 30 30 30位二进制,所以当 n > 60 n>60 n>60直接输出 1 1 1就好了…

太菜了害…

#include 
using namespace std;const int maxn = 2e5+10; int n,a[maxn],b[maxn];int main(){
cin >> n; if( n>60 ){
cout << 1; return 0; } for(int i=1;i<=n;i++) cin >> a[i],b[i] = a[i]^b[i-1]; int ans = 1e9; for(int i=1;i<=n;i++) for(int j=0;j<=60&&i-j>=1;j++)//枚举长度 for(int k=0;k<=60&&i+1+k<=n;k++) {
if( (b[i]^b[i-j-1])>(b[i+1+k]^b[i]) ) ans = min( ans,j+k ); } if( ans==1e9 ) ans = -1; cout << ans;}

转载地址:https://issue-is-vegetable.blog.csdn.net/article/details/110412218 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Tarjan经典问题合集
下一篇:1455D. Sequence and Swaps(思维)

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月21日 07时22分28秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章