HJA的异或值

总时间限制: 
20000ms

内存限制: 
512000kB
描述

形态形成场(Morphogenetic Field)假说是Rupert Sheldrake提出的一种“共鸣”理论,是事件的共鸣。连续发生同类事件的场所被称为“形态形成场”,所发生的同类事件则被称为“形态共鸣”。

有一个验证这一假说的著名实验:将860只白鼠等分成两批,在相距10.8英里的两个实验室进行三个阶段的实验。

第一阶段在实验室A用300只进行一项简易的迷宫实验,让一只白鼠进入简易迷宫盒,测量其通过的时间,一次实验用10只白鼠在10个迷宫盒中同时进行,如此进行30次。而得到的数据显示,从第4次实验开始白鼠的平均通过时间都会在小范围内比前次短一些。

第二阶段在完成第一阶段的72小时之后,仍在实验室A用剩余的130只白鼠,使用相同的迷宫盒进行实验,而这次平均通过时间较第一阶段的平均时间短了20秒。

第三阶段在完成第二阶段的10天之后,在实验室B进行。这次实验使用了430只白鼠和10个全新的迷宫盒。而令人吃惊的是,所有白鼠都是以最短的路线走完迷宫,时间都在28秒左右。完全没有过交流的两批白鼠在不同时间和地点做同一种实验,竟然有“积累经验”的效果。

尽管如此,白鼠和人类在构造上还是存在一定的差距。而关于人类与形态形成场的关系,也有过一个实验,被称为密室实验。两批被实验者分别被关在两个不同的屏蔽的信号的密室,从密室B逃脱需要解开一个机关,而密室A内有解开机关的线索。在密室A中的人无法通过任何通讯手段和密室B中的人联系,而密室B中的人凭自身力量也是无法从密室中逃脱的。实验进行了9个小时,最后密室B中的一个小女孩解开了机关。事后小女孩回忆,自己在尝试解开机关的时候产生了幻觉,似乎有人在和她交流,等她从幻觉中反应过来的时候,她自己已经在解开机关的途中了,而剩下的部分她也知道该如何操作。密室A中也有人说自己似乎在和一个不在房间内的人交谈,而这个人正是密室B中小女孩的哥哥。

形态形成场假说对此的解释是,存在这样一个形态形成场,存储了关于特定事件的信息。生物可以作为“读取者”或者“写入者”对形态形成场的信息进行增添或者修改。每个人“读取”和“写入”的能力是不一样的,“读取”和“写入”的双方之间也存在着一种类似“同步”的概念,基因相近的人之间的“同步”较其他人来说可能较为容易。一个可以支撑这一解释的例子是许多双胞胎之间的心灵感应现象。

下面是在密室实验中的一个子机关。密室A中有一台机器,它会在内等概率随机一个数,记作。密室B中有另一台机器,要求密室B中的人输入另一个内的数,记作。机关解除要求对于给定的,令表示异或,表示与的异或值,使得达到最大值。

密室A中的人可以算出应输入的值,并尝试通过形态形成场传递给密室B中的人。假设传递的成功率为。如果传递成功,那么密室B中的人就会输入传递的值,否则会在内等概率随机输入一个数作为的值。请求出,对于一组确定的和的值,的期望值是多少?

输入
输入数据仅包含一行,其中有一个正整数和一个实数,含义如题目描述中所述。至多精确到小数点后位。
输出
输出一行,用科学计数法表示的期望值。输出一个实数和一个非负整数,表示,其中。特别地,如果答案为,那么。
因为openjudge没有spj,所以请保留八位小数
样例输入
【样例输入1】
3 0.5
【样例输入2】
123456 0.5
样例输出
【样例输出1】
2.000000 0
【样例输出2】
9.806367 4
提示
n <= 10^18
来源
zhonghaoxi
本題難點在於給定一個n,對於1~n中每個k,存在1<=a<=n,使得k^a最大,求所有k^a之和。
這個問題確實不太好想,我們先要瞭解如下幾點:
  1. 在同類題目中,都有高位完全優先的性質,即只要高位能取到最優解,其他位置完全不用考慮。
  2. 如果處理整個數字沒有思路,可以嘗試安慰分解,對於每一位單獨處理。

在本題中,就運用了以上兩點,我們從最高非零位向下枚舉,

  如果n的這一位爲1,那麼對於1~n所有數,其最大異或結果這一位一定爲1

  如果這一位爲0,那麼如果前面不存在退位現象,即本可以取到1,但爲了答案最優,只取了0,那麼這一位就可以填1,結果也就有1

下面就該求退位的個數了,可以發現,退位的節點數量正好等於1~n安按位建成的trie樹右方孔子樹,

  當第一次遇到n在第i位爲0是,之前不存在退位現象,而這一爲之後,有(1<<i)個數退位,

  而當第i爲處理往後,i--,空子樹的一半可能在本層填滿,而表示節點樹減半。

剩下的問題就自己yy了。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<string>
#include<queue>
#include<stack>
using namespace std;
#ifdef WIN32
#define LL "%I64d"
#else
#define LL "%lld"
#endif
#define MAXN 1100
#define MAXV MAXN*2
#define MAXE MAXV*200
#define MAXT MAXN * 20
#define PROB "expxor"
typedef long long qword; qword n;
double p;
qword tot[MAXN];
inline qword lowbit (qword x)
{
return x&(-x);
}
void print_ldouble(double x)
{
int t=;
if (x==)
{
printf("0.00000000 0");
return ;
}
while (x>=)
{
x/=;
t++;
}
while (x<)
{
x*=;
t--;
}
printf("%.8lf %d\n",x,t);
}
void search1(qword n,int lev=)
{
if (lev==)
{
tot[lev]+=n;
return ;
}
if (n&(1LL<<lev))
{
tot[lev]+=n-(1LL<<lev)+;
for (int i=;i<lev;i++)
{
tot[i]+=1LL<<lev>>;
}
search1(n-(1LL<<lev),lev-);
}else search1(n,lev-);
}
long double work1(qword n)
{
long double ret=;
int i;
search1(n);
for (i=;i>=;i--)
{
ret+=(long double)(1LL<<i)*tot[i]*(n+-tot[i]);
}
return 2.0*ret/(n+)/(n+);
}
long double work2(qword n)
{
int i;
long double ans=;
qword tot=;
for (i=;!(n&(1ll<<i)) && i>=;i--);
for (;i>=;i--)
{
if (n&(1ll<<i))
{
ans+=(long double)(1ll<<i)*(n+);
tot>>=;
}else
{
ans+=(long double)(1ll<<i)*(n+-(tot>>)-(1ll<<i));
tot+=(long double)(1ll<<i);
}
}
/*本函數中tot>>=1意思是對於上一層空着的子樹,在本層有一半仍是空的,另一半半滿,可能會加上(1ll<<i)
*/
return 1.0*ans/(n+);
}
int main()
{
freopen(PROB".in","r",stdin);
// freopen(PROB".out","w",stdout);
qword i,j,k;
qword x,y,z;
qword mx;
scanf(LL "%lf",&n,&p);
double ans=;
long double p1=1.0/n;
long double p2=1.0/n/n;
ans=work2(n-)*p+work1(n-)*(-p);
print_ldouble(ans);
// printf("%.8lf\n",ans);
return ;
}

HJA的异或值的更多相关文章

  1. [LeetCode] Maximum XOR of Two Numbers in an Array 数组中异或值最大的两个数字

    Given a non-empty array of numbers, a0, a1, a2, … , an-1, where 0 ≤ ai < 231. Find the maximum re ...

  2. CSDN 正整数异或值问题

    题目详情: http://student.csdn.net/mcs/programming_challenges?page=4 给你n个正整数,请你计算出有多少对数的异或值小于等于k. 输入描写叙述: ...

  3. Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset(01字典树求最大异或值)

    http://codeforces.com/contest/706/problem/D 题意:有多种操作,操作1为在字典中加入x这个数,操作2为从字典中删除x这个数,操作3为从字典中找出一个数使得与给 ...

  4. Codeforces Round #482 (Div. 2) : Kuro and GCD and XOR and SUM (寻找最大异或值)

    题目链接:http://codeforces.com/contest/979/problem/D 参考大神博客:https://www.cnblogs.com/kickit/p/9046953.htm ...

  5. 异或值 xor

    题目描述 给出一个 N 个点的带权无向图,要求从 1 号点到 N 号点的一条路径,使得路径上的边 权异或值最大. 输入格式 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M ...

  6. 51Nod XOR key —— 区间最大异或值 可持久化字典树

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1295 1295 XOR key  题目来源: HackerRa ...

  7. Leetcode 421.数组中两数的最大异或值

    数组中两数的最大异或值 给定一个非空数组,数组中元素为 a0, a1, a2, … , an-1,其中 0 ≤ ai < 231 . 找到 ai 和aj 最大的异或 (XOR) 运算结果,其中0 ...

  8. bzoj 2819 Nim dfn序+树状数组维护区间异或值

    题目大意 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可以不取.谁不能取谁输.这个游戏是有必胜策略 ...

  9. CSU 1214 找最大异或值

    题目大意: 给定一堆数,从中找2个数异或得到的最大值 直接暴力会超时,我们要考虑对于每一个数去匹配找到异或的最大值,我们希望2进制越前面的数尽可能都为1 所以我们用 0-1 字典树保存这些数,因为一个 ...

随机推荐

  1. Android SDK无法更新问题解决

    1.在SDK Manager下Tools->Options打开了SDK Manager的Settings,选中“Force https://… sources to be fetched usi ...

  2. SonarQube代码质量管理平台安装与使用--转载

    原文:http://blog.csdn.net/hunterno4/article/details/11687269 Sonar简介 Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量, ...

  3. Java泛型方法定义及泛型类型推断

    泛型的推断 @Test public void test3(){ //类型推断时使用两个类型的最小公倍数 int x1 = add(3,4); Number x2 = add(3.5,4); Obje ...

  4. oracle授权另外一个用户访问自己创建的数据对象

    oracle安装好之后,有一个默认的scott用户,该用户有一个默认的emp表,怎样让新创建的用户也能够访问这个表呢? 授权xiaoming这个用户访问emp表,但是xiaoming只有select权 ...

  5. LAMP网站架构方案分析

    本文引自:http://www.williamlong.info/archives/1908.html LAMP(Linux-Apache-MySQL-PHP)网站架构是目前国际流行的Web框架,该框 ...

  6. 简洁JS 日历控件 支持日期和月份选择

    原文出处 以下这个JS日历控件是我的闲暇之余自己编写的,所有的代码全部在IE7/IE8/Firefox下面测试通过, 而且可以解决被iframe层遮盖的问题.现在只提供两种风格(简洁版和古典版)和两种 ...

  7. gulp 前端自动化工具

    一开篇 在前端开发的过程中,我们经常会碰到压缩.合并.图片script 等,于是就有了gulp 前端自动化构建工具,它能帮你在前端开发中,节省时间. 1,安装 node.js 因为gulp 构建工具是 ...

  8. css hack方法总结

    IE6识别:下划线 _ 和 星号 *IE7识别:星号 *IE6-IE10识别: \9 css hack方式,条件注释法<!--[if IE]>这段文字只在IE浏览器显示<![endi ...

  9. java 开发基础篇1环境安装--eclipse安装教程

    如何安装java环境 http://jingyan.baidu.com/article/a24b33cd59b58e19fe002bb9.html JDK download http://www.or ...

  10. Merge OUTPUT 高级用法综合写的一个MergeTab的存储过程

    因为工作中常用到 合并两张表中的数据,主要是写下来给自己备忘,T-SQL 中 MERGE 的用法 WHEN MATCHED THEN UPDATE -- 中加了 后面要更新的列是否都相等,如果相等就没 ...