题目传送门

题意:所有连续的子序列的三种位运算计算后的值的和的期望分别是多少

分析:因为所有连续子序列的组数有n * (n + 1) / 2种,所以要将他们分类降低复杂度,以ai为结尾的分成一组,至于具体的做法,我觉得这篇题解已经写的很详细了,UESTC 1709 Binary Operations

吐槽一下,题解的代码交上去是TLE的,至今不知道为何,我写的是WA,将所有类型改成ll才AC。。。

/************************************************
* Author :Running_Time
* Created Time :2015/10/8 星期四 17:43:10
* File Name :B.cpp
************************************************/ #include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std; #define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int N = 5e4 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const double EPS = 1e-8;
ll a[N], num[35], s[N]; void add(int x) {
int k = 0;
while (x) {
if (x & 1) num[k]++;
x >>= 1; k++;
}
} int main(void) {
ll T, cas = 0; scanf ("%d", &T);
while (T--) {
ll n; scanf ("%lld", &n);
for (int i=0; i<n; ++i) scanf ("%lld", &a[i]);
memset (num, 0, sizeof (num));
memset (s, 0, sizeof (s));
double ans1 = 0, ans2 = 0, ans3 = 0;
ll tmp;
for (int i=0; i<n; ++i) {
s[i] = a[i];
if (i == 0) add (a[i]);
else {
tmp = a[i];
for (int j=0; j<31; ++j) {
if (tmp & (1 << j)) {}
else num[j] = 0;
s[i] += (num[j] * (1 << j));
}
add (a[i]);
}
ans1 += s[i];
} memset (num, 0, sizeof (num));
for (int i=0; i<n; ++i) {
s[i] = a[i];
if (i == 0) add (a[i]);
else {
tmp = a[i];
for (int j=0; j<31; ++j) {
if (tmp & (1 << j)) num[j] = i;
s[i] += (num[j] * (1 << j));
}
add (a[i]);
}
ans2 += s[i];
} memset (num, 0, sizeof (num));
for (int i=0; i<n; ++i) {
s[i] = a[i];
if (i == 0) add (a[i]);
else {
tmp = a[i];
for (int j=0; j<31; ++j) {
if (tmp & (1 << j)) num[j] = i - num[j];
s[i] += (num[j] * (1 << j));
}
add (a[i]);
}
ans3 += s[i];
}
ll len = n * (n + 1) / 2;
printf ("Case #%lld: %.6lf %.6lf %.6lf\n", ++cas, ans1 / len, ans2 / len, ans3 / len);
} return 0;
}

  

最新文章

  1. ACID属性区别
  2. RAID磁盘阵列笔记
  3. jsp实现回车登录
  4. php基础教程-变量
  5. JavaScript排序算法——归并排序
  6. Mongodb 字段类型转换
  7. php 301
  8. Linux企业级项目实践之网络爬虫(23)——系统测试:找出系统中的bug
  9. (原创)(C#随笔)IEnumerable&lt; ICollection &lt; IList区别
  10. java实现xml文件CRUD
  11. HDU-1598-find the most comfortable road(暴力+并查集)多看看,
  12. ES6/ES7/ES8常用特性和新特性
  13. MatConvNet中关于vl_simplenn_display的一些分析
  14. Unity3d插件Master Audio AAA Sound v3.5
  15. 提升HTML5的性能体验系列之二 列表流畅滑动
  16. MIUI 6的毛玻璃效果的技术实现(实时模糊)
  17. Python GUI 编程
  18. flutter实现(OutlineButton)线框按钮
  19. Flutter - 下载别人的Flutter项目,本地编译不过
  20. 20155217 2016-2017-2 《Java程序设计》第8周学习总结

热门文章

  1. device not managed by NetworkManager
  2. 百度ai 基于node 语音识别 音频文件类型转换
  3. DT的jquery
  4. 文件宝局域网传输/播放功能Windows10系统经验贴(感谢文件宝用户@卡卡罗特 和@24K 純情)
  5. 2016/05/27 php上传文件常见问题总结
  6. MongoDB Spark Connector
  7. webdriver.close() quit() 批量kill进程 内存耗尽的解决办法
  8. android 图片内存问题
  9. group by where having 联合使用
  10. 【独立开发人员er Cocos2d-x实战 007】使用Cocos2dx UserDefault.xml