码迷,mamicode.com
首页 > 其他好文 > 详细

HihoCoder - 1509 XOR Sorting

时间:2017-08-01 21:48:25      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:pre   i+1   描述   ret   有一个   cout   长度   进制   problem   

#1509 : 异或排序

时间限制: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

输出

一个非负正数,表示答案

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



题目大意:

给一个数n,和n个数,(n<=50,a[i]<=2^60)有一个数s,让s xor a[i]<=s xor a[i+1]

分析

对于2个二进制数比如

00011110111

00011111111

它们前7位相同,第8位不同,如果让s满足s xor a[i]<=s xor a[i+1]

那么,他们第8位对应的s那一位也就确定了

这样将a[i]和a[i+1]遍历一遍,就可以得到s中一共有几位数已经被确定了

又因为s中一共有60位数,所以就可以得到s中有多少位不确定,每一个不确定的位有0和1两种可能,设不确定的位数为x,那么s一共有2的x次方种可能。

 1 #include<iostream>
 2 using namespace std;
 3 #include<queue>
 4 #include<cstdio>
 5 #include<map>
 6 #include<set> 
 7 typedef long long LL;
 8 LL a[100];
 9 int b1[100],b2[100];
10 int v[100];
11 void deal(LL a,LL b)
12 {
13     for (int i=1;i<=60;i++)//求a的各2进制位 
14     {
15         b1[i]=a%2;
16         a/=2;
17     }
18     for (int i=1;i<=60;i++)//求b的各2进制位 
19     {
20         b2[i]=b%2;
21         b/=2;
22     }
23     int ans;
24     for (int i=60;i>=1;i--)//找到第一个不相同的位,存在ans里 
25     {
26         if (b1[i]==b2[i]) continue;
27         ans=i;
28         break;
29     }
30     v[ans]=1;//将这一位做上标记 
31 }
32 int main()
33 {
34     int n;
35     cin>>n; 
36     for (int i=1;i<=n;i++)
37     {
38         scanf("%lld",&a[i]);
39     }
40     for (int i=1;i<=n-1;i++)
41     {
42         deal(a[i],a[i+1]);
43     }
44     LL ans=0;
45     for (int i=1;i<=60;i++)
46     {
47         if (v[i]) continue;
48         ans++;//计算不确定的位数共有几个 
49     }
50     //cout<<ans<<endl;
51     ans=(LL)1<<ans;//答案为2^ans 
52     cout<<ans<<endl;
53     return 0;
54 }

 

HihoCoder - 1509 XOR Sorting

标签:pre   i+1   描述   ret   有一个   cout   长度   进制   problem   

原文地址:http://www.cnblogs.com/xfww/p/7270681.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!