传送门

BZOJ没数据范围。。。

其实数据范围是这样的。。

前20%可以直接n^3暴力枚举每个区间

前40%可以考虑每一位,因为所有数每一位都是独立的,而和的期望=期望的和,那么可以枚举每一位,再枚举区间,最大 31*n*n

想到枚举每一位也就离正解不远了,可以dp,

对于xor有贡献的是区间xor值为1的区间,那么f[i]表示以i结尾的区间异或值为1的个数,那么xor就很好解决了

对于or,我们只需要找出所有的全为0的区间,拿总区间个数减去就好,

对于and,我们只需要找出所有全为1的区间即可

#include <cstdio>
#include <cstring>
#define N 100005
#define LL long long
#define max(x, y) ((x) > (y) ? (x) : (y)) int p1, p0, mx;
int a[N], f[N];
LL n, num0, num1, cnt;
bool b[N];
double ans1, ans2, ans3;
//f[i]以i结尾的 xor值为1的数量 int main()
{
int i, j, k;
scanf("%lld", &n);
for(i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
mx = max(mx, a[i]);
}
for(k = 0; mx; mx >>= 1, k++);
for(i = 0; i < k; i++)
{
p0 = p1 = -1;
num0 = num1 = cnt = 0;
for(j = 1; j <= n; j++)
{
if(a[j] & (1 << i))
f[j] = j - f[j - 1];
else
f[j] = f[j - 1];
cnt += f[j];
b[j] = (a[j] & (1 << i));
}
for(j = 1; j <= n; j++)
{
if(!b[j] && p0 == -1) p0 = j;
if(b[j] && p0 ^ -1) num0 += (LL)(j - p0) * (j - p0), p0 = -1;
if(b[j] && p1 == -1) p1 = j;
if(!b[j] && p1 ^ -1) num1 += (LL)(j - p1) * (j - p1), p1 = -1;
}
if(p0 ^ -1) num0 += (LL)(j - p0) * (j - p0);
if(p1 ^ -1) num1 += (LL)(j - p1) * (j - p1);
cnt *= 2;
for(j = 1; j <= n; j++)
if(a[j] & (1 << i)) cnt--;
ans1 += 1.0 * (1 << i) * cnt / n / n;
ans2 += 1.0 * (1 << i) * num1 / n / n;
ans3 += 1.0 * (1 << i) * (n * n - num0) / n / n;
}
printf("%.3lf %.3lf %.3lf\n", ans1, ans2, ans3);
return 0;
}

  

最新文章

  1. HCTF时PHP WAF然有RLFI漏洞
  2. android——判断网络状态
  3. Stanford机器学习笔记-7. Machine Learning System Design
  4. We7 CMS研究
  5. Android 计算布局背景的透明度
  6. css中textarea去掉边框和选中后的蓝色边框问题的解决方法
  7. JavaScript的jsonp
  8. 浅谈网络爬虫爬js动态加载网页(三)
  9. Ubuntu14.04不支持U盘exfat格式该如何解决
  10. pywin32 安装错误 ImportError: DLL load failed: 不是有效的 Win32 应用程序
  11. php随机10-thinkphp 3.1.3 模板继承 布局
  12. 基于JSP+SERVLET的新闻发布系统(二)
  13. JPA 系列教程3-单向多对一
  14. ecos资源探测器
  15. 【PHP】学习中遇到的php方法
  16. Android ART、Dalvik在multidex上的差异、关联
  17. 操作系统服务:OS模块
  18. ncat的使用
  19. iOS.Notification.Bar.Color
  20. LOJ#2540 随机算法

热门文章

  1. PHP小数处理常用函数
  2. Nodejs + Jshint自动化静态代码检查
  3. leetcode_1049. Last Stone Weight II_[DP]
  4. Sublime 设置移动光标快捷键
  5. shell补充知识点
  6. (2)JSTL的fmt国际化标签库
  7. 第九次第十次作业 网页设计HTML语言之mp3 与mp4音频与视频两次作业,功能在一起也可
  8. Alert and Action sheets and Timer and Animation
  9. [LUOGU] P1387 最大正方形
  10. DocDokuPLM 2.5安装