博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hihoCoder挑战赛28 题目1 : 异或排序
阅读量:6084 次
发布时间:2019-06-20

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

题目1 : 异或排序

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

给定一个长度为 n 的非负整数序列 a[1..n]

你需要求有多少个非负整数 S 满足以下两个条件:

(1).0 ≤ S < 260

(2).对于所有 1 ≤ i < n ,有 (a[i] xor S) ≤ (a[i+1] xor S)

输入

第一行一个正整数 n

第二行 n 个非负整数表示序列 a[1..n]

1 ≤ n ≤ 50

0 ≤ a[i] < 260

输出

一个非负正数,表示答案

样例输入
31 2 3
样例输出
288230376151711744

 

/*    Name: xor sort    Copyright:@2017 shenben     Author: shenben    Date: 25/04/17 15:32    Description: // a[i] xor a[i+1] = (a[i] xor S) xor (a[i+1] xor S)// 假如a[i] xor a[i+1]的是1的最高位是第k[i]位// 只需判断a[i] xor S的第k[i]位,是0则S满足,是1则S不满足// 所以符合要求的S必须满足对于所有1 <= i < n,有S的第k[i]位与a[i]的第k[i]位相同*/#include
#include
#include
#include
using namespace std;typedef long long ll;template
inline void read(T &x){ T f=1;char ch=getchar();x=0; while(ch<'0'||ch>'9'){
if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} x*=f;}const int N=65;int n;ll a[N];short k[N];inline void make(int x,int y){ if(k[x]==-1) k[x]=y;else if(k[x]!=y){puts("0");exit(0);}}int main(){ read(n);memset(k,-1,sizeof k); for(int i=1;i<=n;i++) read(a[i]); for(int i=1;i
>j)&1); break; } } } ll ans=1; for(int i=0;i<60;i++) if(k[i]==-1) ans<<=1; cout<
<<'\n'; return 0;}

 

转载于:https://www.cnblogs.com/shenben/p/6766754.html

你可能感兴趣的文章
java基础讲解06-----字符串
查看>>
会计的思考(44):史上最富有的会计--洛克菲勒的会计视角
查看>>
宏的写法和特点
查看>>
OC门的工作原理
查看>>
《Spring1之第八次站立会议》
查看>>
关于mysql的初步学习 (一)
查看>>
VB6在win10下的使用经验
查看>>
DB2数据库中得到当前年月日,时分秒的语句
查看>>
IOS第三方地图-百度地图集成
查看>>
swift学习网站
查看>>
DocumentFragments
查看>>
HTTP-web-Internet
查看>>
【 D3.js 入门系列 — 4 】 如何使用比例尺( scale )
查看>>
Android优化后的定时器代码
查看>>
Html.RenderPartial("")与Html.Partial("")区别
查看>>
poj2524 Ubiquitous Religions(并查集)
查看>>
POJ 1905, Expanding Rods
查看>>
微信内移动前端开发抓包调试工具fiddler使用教程
查看>>
在Windows及Linux下获取毫秒级运行时间的方法
查看>>
【原创】Ubuntu以root用户自动登录
查看>>