usaco6.1.3 Cow XOR

Ascend C 算子开发遇到的问题及解决方法 在学习Ascend C算子开发进阶课程的时候,进行Ascend C自定义算子工程、算子调用等实验,在开发环境中遇到了一些问题,在这里记录一下。首先如果在启智社区CANN版本为6.3 ,要进行Ascend C算子开发,需要更新CANN版本。 阅读详情

一 原题

Cow XOR
Adrian Vladu -- 2005

Farmer John is stuck with another problem while feeding his cows. All of his N (1 ≤ N ≤ 100,000) cows (numbered 1..N) are lined up in front of the barn, sorted by their rank in their social hierarchy. Cow #1 has the highest rank; cow #N has the least rank. Every cow had additionally been assigned a non-unique integer number in the range 0..(221 - 1).

Help FJ choose which cows will be fed first by selecting a sequence of consecutive cows in the line such that the bitwise "xor" between their assigned numbers has the maximum value. If there are several such sequences, choose the sequence for which its last cow has the highest rank. If there still is a tie, choose the shortest sequence.

TIME LIMIT: 0.5 sec

PROGRAM NAME: cowxor

INPUT FORMAT

  • Line 1: A single integer N
  • Lines 2..N+1: N integers ranging from 0 to 221 - 1, representing the cows' assigned numbers. Line j describes cow of social hierarchy j-1.

SAMPLE INPUT (file cowxor.in)

5
1
0
5
4
2

INPUT DETAILS:

There are 5 cows. Cow #1 had been assigned with 1; cow #2 with 0; cow #3 with 5; cow #4 with 4; cow #5 with 2.

OUTPUT FORMAT

  • Line 1: Three space-separated integers, respectively: the maximum requested value, the position where the sequence begins, the position where the sequence ends.

SAMPLE OUTPUT (file cowxor.out)

6 4 5

OUTPUT DETAILS:

4 xor 2 = 6 (001) xor (010) = (011) 


二 分析

求出前n个数的异或结果Xor[n],那么问题转化为在n个数中找到异或结果最大的两个。因为N可能会到10w,所以O(n^2)的方法是过不了的。我们考虑建立一棵字母表为0,1的Trie树,这样给定一个数,寻找与它异或结果最大的数的时间复杂度会降到lg(Xor[i])级别(输入数字的大小不超过2^21,异或结果也不会超过2^21)。这题坑爹的地方在于usaco卡内存。。


三 代码

先附上我蠢蠢的会爆内存的trie树代码:
/*
ID:maxkibb3
LANG:C++
PROB:cowxor
*/


#include<cstdio>
#include<bitset>


const int MAX = 1e5 + 5;


int N, Arr[MAX], Xor[MAX], Trie_size;


struct Node {
	int val, left, right;


	Node() { val = 0; left = right = -1; }
	
	Node(int _v) : val(_v) { left = right = -1; }
}Trie[MAX * 5];


void create(int _v, int _f) {
	if(_v) Trie[_f].right = Trie_size;
	else Trie[_f].left = Trie_size;
	Trie[Trie_size++] = Node(_v);
}


void insert(int _v, int _i) {
	std::bitset<21> bits(_v);
	int root = 0;
	for(int i = 20; i >= 0; i--) {
		if(bits[i]) {
			if(Trie[root].right == -1)
				create(1, root);
			root = Trie[root].right;
		}
		else {
			if(Trie[root].left == -1)
				create(0, root);
			root = Trie[root].left;
		}
	}
	create(_i, root);
}


int find(int _v) {
	std::bitset<21> bits(_v);
	int root = 0;
	for(int i = 20; i >= 0; i--) {
		if(bits[i]) {
			if(Trie[root].left != -1)
				root = Trie[root].left;
			else
				root = Trie[root].right;
		}
		else {
			if(Trie[root].right != -1)
				root = Trie[root].right;
			else
				root = Trie[root].left;
		}
	}
	return Trie[Trie[root].right].val;
}


int main() {
	freopen("cowxor.in", "r", stdin);
	freopen("cowxor.out", "w", stdout);
	scanf("%d", &N);
	Trie[Trie_size++] = Node(0);
	for(int i = 1; i <= N; i++)
		scanf("%d", &Arr[i]);
	int ans = Arr[1], l = 1, r = 1;
	for(int i = 1; i <= N; i++) {
		Xor[i] = Xor[i - 1] ^ Arr[i];
		insert(Xor[i], i);
		int idx = find(Xor[i]);
		int tmp = Xor[idx] ^ Xor[i];
		if(tmp > ans) ans = tmp, l = idx + 1, r = i;
	}
	printf("%d %d %d\n", ans, l, r);
	return 0;
}



运行结果:
USER: Qi Shen [maxkibb3]
TASK: cowxor
LANG: C++

Compiling...
Compile: OK

Executing...
   Test 1: TEST OK [0.000 secs, 8664 KB]
   Test 2: TEST OK [0.000 secs, 8664 KB]
   Test 3: TEST OK [0.000 secs, 8664 KB]
   Test 4: TEST OK [0.000 secs, 8664 KB]
   Test 5: TEST OK [0.028 secs, 8928 KB]
   Test 6: TEST OK [0.084 secs, 9984 KB]
   Test 7: TEST OK [0.112 secs, 9324 KB]
   Test 8: TEST OK [0.140 secs, 11172 KB]
   Test 9: TEST OK [0.084 secs, 8664 KB]
   Test 10: TEST OK [0.056 secs, 8664 KB]
   Test 11: TEST OK [0.056 secs, 8664 KB]
   Test 12: TEST OK [0.126 secs, 10116 KB]
   Test 13: TEST OK [0.042 secs, 8664 KB]
   Test 14: TEST OK [0.098 secs, 8664 KB]
   Test 15: TEST OK [0.308 secs, 11700 KB]
   Test 16: TEST OK [0.294 secs, 11700 KB]
   Test 17: TEST OK [0.294 secs, 11700 KB]
   Test 18: TEST OK [0.210 secs, 10908 KB]
   Test 19: TEST OK [0.028 secs, 8928 KB]
   Test 20: TEST OK [0.000 secs, 8664 KB]

All tests OK.



AC代码:
/*
ID:maxkibb3
LANG:C++
PROB:cowxor
*/

#include<cstdio>
#include<bitset>
#include<cstring>
#include<map>

#define left(x) ((x << 1) + 1)
#define right(x) ((x << 1) + 2)

const int MAX = 1e5 + 5;

int N, Xor[MAX];
bool Trie[1 << 22];
std::map<int, int> M;

void insert(int _v, int _i) {
	std::bitset<21> bits(_v);
	int root = 0;
	for(int i = 20; i >= 0; i--) {
		if(bits[i]) root = right(root);
		else root = left(root);
		if(!Trie[root]) Trie[root] = 1;
	}
	std::map<int, int>::iterator it = M.find(root);
	if(it == M.end()) M.insert(std::make_pair(root, _i));
	else it->second = _i;
}

int find(int _v) {
	std::bitset<21> bits(_v);
	int root = 0, next;
	for(int i = 20; i >= 0; i--) {
		if(bits[i]) {
			next = left(root);
			if(Trie[next]) root = next;
			else root = right(root);
		}
		else {
			next = right(root);
			if(Trie[next]) root = next;
			else root = left(root);
		}
	}
	std::map<int, int>::iterator it = M.find(root);
	if(it != M.end()) return it->second;
}

int main() {
	freopen("cowxor.in", "r", stdin);
	freopen("cowxor.out", "w", stdout);
	
	scanf("%d", &N);
	for(int i = 1; i <= N; i++) {
		int tmp;
		scanf("%d", &tmp);
		Xor[i] = Xor[i - 1] ^ tmp;
	}
	
	int ans = Xor[1], l = 1, r = 1;
	for(int i = 1; i <= N; i++) {
		insert(Xor[i], i);
		int idx = find(Xor[i]);
		int tmp = Xor[idx] ^ Xor[i];
		if(tmp > ans) ans = tmp, l = idx + 1, r = i;
	}
	printf("%d %d %d\n", ans, l, r);
	return 0;
}




零基础也能搞定!华为USG6000V防火墙WEB管理界面开启教程 本文详细介绍了华为USG6000V防火墙WEB管理界面的开启教程,从环境准备、网络配置到防火墙初始化,逐步指导用户完成图形化管理界面的搭建。特别适合零基础用户快速掌握企业级防火墙的可视化操作,提升安全管理效率。 阅读详情

相关推荐

头歌平台-人工智能导论实验(人脸识别)

答案仅供参考,自己动手丰衣足食!!!

qq_52119136的博客 3026

【USACO6.1.3】Cow XOR奶牛异或 trie

NKOJ 1873 奶牛异或问题描述 农民约翰在喂奶牛的时候被另一个问题卡住了。他的所有N(1 <= N <= 100,000)个奶牛在他面前排成一行(按序号1..N的顺序),按照它们的社会等级排序。奶牛#1有最高的社会等级,奶牛#N最低。每个奶牛同时被指定了一个不唯一的附加值,这个数在0..2^21 - 1的范围内。 帮助农民约翰找出应该从哪一头奶牛开始喂,使得从这头奶牛开始的一个连续的

rgnoH的博客 862

保姆级教程:用杰理701N可视化SDK搞定ANC降噪配置(从工具到代码全流程)

本文提供了一份详细的杰理701N可视化SDK配置ANC降噪功能的教程,涵盖从开发环境搭建到代码集成的全流程。通过图形化工具和代码示例,帮助开发者快速掌握ANC参数配置技巧,优化降噪效果,解决常见问题。

weixin_30616969的博客 450

usaco 6.1 Cow XOR(USACO终结,二进制的一些应用)

Cow XOR Adrian Vladu -- 2005 Farmer John is stuck with another problem while feeding his cows. All of his N (1 ≤ N ≤ 100,000) cows (numbered 1..N) are lined up in front of the barn, sorted by their

志当存高远 1235

AI漫剧实战:MiniMaxH3本地部署+ComfyUI工作流,6G显存出长视频

随着AI视频生成技术的普及,创作者开始追求在有限硬件条件下的本地化部署。本地部署不仅降低使用成本,更能获得对生成流程的完全可控性,这为高频次的内容生产提供了基础。以开源工作流引擎ComfyUI为依托,通过量化模型与显存优化,即便是6G显存的中端显卡也能流畅运行MiniMaxH3视频生成模型,输出60秒级别的AI漫剧片段。本文从视频生成原理出发,讲解模型选择、节点搭建、参数调优与提示词结构化设计,并延伸到剧本拆分、角色一致性控制、后期合成及平台变现路径,为AI漫剧创作者提供一套低成本、可复制的工程化方案。无论

weixin_29051149的博客 159

自适应IIR格型滤波器的Matlab实现

概述 在现有的众多抑制窄带干扰的信号处理手段中,时域自适应陷波干扰抑制技术具有实现简单、抗干扰性能好等优点。IIR陷波器按照结构可以分为直接型和格型两种。相比自适应直接型IIR陷波器,自适应格型IIR陷波器不仅可以准确地控制滤波器的陷波频率,也可以准确地调整陷波器的带宽。 传递函数 二阶自适应IIR格型陷波器的传递函数H(z)为: 其中α与陷波带宽有关,β与陷波频率有关;对应的结构如下图所示: Matlab算法实现 ...

剑藏锋的博客 2799

USACO 6.1 Cow XOR

Cow XORAdrian Vladu -- 2005 Farmer John is stuck with another problem while feeding his cows. All of his N (1 ≤ N ≤ 100,000) cows (numbered 1..N) are lined up in front of the barn, sorted by the...

weixin_30538029的博客 178

Pinocchio 快速详细入门教程 —— 开源机器人运动学动力学库

本文介绍了机器人学中的数字机器人学、正逆运动学、动力学仿真与控制、最优控制等核心主题,以及Pinocchio库的应用。内容包括: 数字机器人学:通过UR5机器人模型演示了构型空间采样、碰撞检测、路径规划等基础操作,使用优化方法在约束条件下寻找有效构型。 运动学:详细讲解了二维和三维机器人的正运动学(构型到末端位置)和逆运动学(目标位置到构型),包括串联机械臂和并联机器人的处理。 动力学与控制:介绍了动力学仿真(如自由落体、摩擦效应)、PD控制、计算扭矩控制,以及接触仿真(碰撞检测与处理)。 最优控制:以独轮

机器人控制与仿真应用 2883

usaco training 6.1.3 Cow XOR 题解

这是字母树的经典应用。首先因为是求xor的最大值,可以用前缀和计算xor值,然后n^2枚举即可。 for (i=1;i<=n;i++) for (j=1;j<i;j++) if ((sum[i]^sum[j-1])>ans) 就记录; 然而由于范围的关系,我们只能优化这个算法。事实证明,每次枚举到一个i时,我们不必用O(N)的效率去寻找。我们可以构建一个字母树(准确的说是01树),它的分叉只是0或1(也像一棵二叉树)。每次算好一个前缀和时,我就把它拆成二进制并加入字母树。在查找的时候,我只需沿着

阿蒋的专栏 3100

YOLOv11改进策略【卷积层】| arXiv 2025 YOLO-Master中的稀疏混合专家ES-MoE 动态路由提适配 + 稀疏激活降延迟,突破精度-效率权衡

ES-MoE(Efficient Sparse Mixture-of-Experts)是为解决传统YOLO类实时目标检测器的静态计算冗余问题而提出的稀疏混合专家模块。现有YOLO架构对所有输入场景采用统一的密集计算模式,导致简单场景资源浪费、复杂场景(如密集小目标、遮挡场景)计算不足,难以平衡检测精度与推理速度。ES-MoE引入实例条件自适应计算,通过动态路由机制为不同复杂度的输入分配差异化计算资源,突破传统静态架构的精度-效率权衡限制,同时适配实时检测的轻量化需求。

Limiiiing的博客 462

BES2810_best1702_best1702_ibrt_三者关系深度解析

一颗芯片的三个名字:BES2810、best1702 与 best1702_ibrt 关系深度解析

weixin_42162924的博客 349

常用技巧 —— 位运算 —— 异或 1 的妙处

由以下两张图可以得出一一般性规律:如果是一个偶数 ^ 1,那么结果是偶数 +1;如果是一个奇数 ^ 1,那么结果是奇数 -1

Alex_McAvoy的博客 2573

rk3588 适配以太网(百兆)

虽然 RK3588 的 GMAC 控制器原生支持千兆速率(10/100/1000 Mbps),但在某些工业控制、物联网网关或成本敏感型硬件设计中,开发者会选择将其配置为 百兆以太网(Fast Ethernet) 模式。

weixin_35723192的博客 218

USACO 6.1.3 Cow XOR 字典树

http://train.usaco.org/usacoprob2?a=Hfv8bxVT1Ac&amp;S=cowxor题目大意:一串N个数(可能有相同),求出异或最大的序列,有相同解则取结尾靠前的,再相同则取短的字典树,在字典树里标记位置/* ID: frontie1 TASK: cowxor LANG: C++ */ #include &lt;iostream&gt; #include &lt...

Frontier_Setter的博客 310

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

[USACO 6.1.3] Cow XOR

题目大意   给出一个序列,求一个连续的子序列的异或和最大. 题解   先探究一下异或的性质.     1.可逆性: A XOR B XOR B = A;     2.满足结合律: (A XOR B) XOR C = A XOR (B XOR C);   利用以上两个性质有助于我们解题.   假设有一序列 A1,A2,A3......An-1,An,可以得到另一序列 B1,B2,B...

weixin_30457881的博客 203

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

谷歌Gemini个人智能:跨应用推理与数据整合的技术真相

个人智能并非泛化AI,而是基于统一身份认证与分层数据架构的上下文缝合技术。其核心原理在于元数据层与内容索引层的结构化关联,通过时间戳对齐、实体识别和行为图谱实现跨应用推理,规避原始数据调用以保障隐私合规。该技术显著提升职场执行者在Gmail、Drive、Photos、Calendar等Google Workspace生态内的信息协同效率,适用于需高频整合邮件、文档、日历与图像线索的真实工作场景。Gemini的‘个人智能’本质是工程驱动的数据主权实践,而非模型能力堆砌。

weixin_30653023的博客 375

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

USACO6.1.3 Cow XOR(cowxor)

首先要知道若a^b=c,则有a,b,c两两异或得到第三个数 num[ i ]记录前i个数字的异或值,所以,要求异或值最大的一段区间,即求num[ ]数组中两个数使之异或值最大 用到的算法是trie树(利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希表高多了) 注意:在保证区间异或值最大的同时,要求最靠前最短的一段 /* ID:xsy97051 LA

xsy_victory的专栏 426

[USACO]6.1.3 cow xor(二进制+Trie)

题意:给你一个序列(n<=100000),求出一个连续的子序列[i,j]使得ai xor ai+1 xor…… xor aj最大,求出这个最大值(其中每个数<=2^21) 分析:题目和求一段子序列的和或者积很像,只是运算法则改变,所以可以往求子段和、积的方法上面考虑 首先如果设sum[i]=a1 xor a2 xor a3……xor ai,则子序列[i,j]的xor值可以表达为su...

weixin_30904593的博客 140

BZOJ 1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐

题目 1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐 Time Limit:5 SecMemory Limit:64 MBSubmit:425Solved:267[Submit][Status] Description The cows are having a picnic! Each of Farmer John's K ...

weixin_30640769的博客 163

Usaco Training Section 6.1 Cow XOR

Cow XOR 奶牛异或 农民约翰在喂奶牛的时候被另一个问题卡住了.他的所有N(1 &lt;= N &lt;= 100,000)个奶牛在他面前排 成一行(按序号1..N 的顺序),按照它们的社会等级排序.奶牛#1 由最高的社会等级,奶牛#N 最低. 每个奶牛同时被赋予了一个唯一的数在0..2^21 - 1 的范围内. 帮助农民约翰找出应该从那一头奶牛开始喂,使得从它开始的某一个连续的自序列上的奶牛...

Monster的博客 492

USACO Cow XOR 解题报告

USER: chen chen [thestor1] TASK: cowxor LANG: C++ Compiling... Compile: OK Executing... Test 1: TEST OK [0.008 secs, 3500 KB] Test 2: TEST OK [0.011 secs, 3500 KB] Test 3: TEST OK [0.008 se

thestoryofsnow的专栏 796

NKOI 1873 COW XOR奶牛异或

Cow XOR奶牛异或 Time Limit:10000MS  Memory Limit:65536K Total Submit:138 Accepted:56  Case Time Limit:500MS Description 农民约翰在喂奶牛的时候被另一个问题卡住了。他的所有N(1 帮助农民约翰找出应该从哪一头奶牛开始喂,使得从这头奶牛开始的一个连续的子序列上,奶牛的附加值的异

SuperGate的博客 1367

usaco6.1-Cow XOR:trie树

Cow XOR Adrian Vladu -- 2005 Farmer John is stuck with another problem while feeding his cows. All of his N (1 ≤ N ≤ 100,000) cows (numbered 1..N) are lined up in front of the barn, sorted by the...

weixin_30326741的博客 197

USACO 6.1解题报告

Postal Vans题目翻译:http://www.nocow.cn/index.php/Translate:USACO/vans计算哈密顿回路。实际上有递推式(需要使用高精度),可以使用矩阵快速幂加速,但是不使用矩阵快速幂也可以通过本题。 f[1]=0,f[2]=2,f[3]=4,f[4]=12; f[i]= 2*(f[i-1]+f[i-2]-f[i-3])+f[i-4];A Rectang

SmallSXJ的博客 537

USACO 2015 February CONTEST,Silver&Gold Division Solution

由于这套题某两题重复了3次,我就只好放在一起写了Cow Hopscotch这道题Bronze,Silver,Gold各有一道,难度依次增加。对于Bronze的,颜色只有两种,r和c<=15,O(n4)O(n^4)跑一发dp即可(比noiopenjudge的dp还简单==)对于Silver的,颜色有10000种,r和c<=100,我们可以对于状态(x,y,c),我们可以记录∑i<x,j<ydp[i][

bblss123的博客 773

[1525] Cow Xor

问题描述 农民约翰在喂奶牛的时候被另一个问题卡住了。他的所有N(1 <= N <= 100,000)个奶牛在他面前排成一行(按序号1..N的顺序),按照它们的社会等级排序。奶牛#1有最高的社会等级,奶牛#N最低。每个奶牛同时被指定了一个不唯一的附加值,这个数在0..2^21 - 1的范围内。 帮助农民约翰找出应该从哪一头奶牛开始喂,使得从这头奶牛开始的一个连续的子序列上...

weixin_30685047的博客 96
上一篇: usaco6.1.2 A Rectangular Barn
下一篇: usaco6.2.1 Calf Flac
max_kibble
博客等级 码龄11年 2粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值