位运算 UEST 84 Binary Operations
2024-08-30 14:38:06
题意:所有连续的子序列的三种位运算计算后的值的和的期望分别是多少
分析:因为所有连续子序列的组数有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;
}
最新文章
- ACID属性区别
- RAID磁盘阵列笔记
- jsp实现回车登录
- php基础教程-变量
- JavaScript排序算法——归并排序
- Mongodb 字段类型转换
- php 301
- Linux企业级项目实践之网络爬虫(23)——系统测试:找出系统中的bug
- (原创)(C#随笔)IEnumerable<; ICollection <; IList区别
- java实现xml文件CRUD
- HDU-1598-find the most comfortable road(暴力+并查集)多看看,
- ES6/ES7/ES8常用特性和新特性
- MatConvNet中关于vl_simplenn_display的一些分析
- Unity3d插件Master Audio AAA Sound v3.5
- 提升HTML5的性能体验系列之二 列表流畅滑动
- MIUI 6的毛玻璃效果的技术实现(实时模糊)
- Python GUI 编程
- flutter实现(OutlineButton)线框按钮
- Flutter - 下载别人的Flutter项目,本地编译不过
- 20155217 2016-2017-2 《Java程序设计》第8周学习总结
热门文章
- device not managed by NetworkManager
- 百度ai 基于node 语音识别 音频文件类型转换
- DT的jquery
- 文件宝局域网传输/播放功能Windows10系统经验贴(感谢文件宝用户@卡卡罗特 和@24K 純情)
- 2016/05/27 php上传文件常见问题总结
- MongoDB Spark Connector
- webdriver.close() quit() 批量kill进程 内存耗尽的解决办法
- android 图片内存问题
- group by where having 联合使用
- 【独立开发人员er Cocos2d-x实战 007】使用Cocos2dx UserDefault.xml