BZOJ4750 密码安全
来源:互联网 发布:人工智能的产品 编辑:程序博客网 时间:2024/06/05 16:33
题目链接
题意就是……像题目说的那样,中文题比较好理解。
之前肠胃炎,一个多星期没写题后写的第一道题。
首先我们可以用单调栈把每个数字以它为最大值的区间求出来,然后由于位运算每位之间不互相联系的特点,我们把每个数字分解为二进制,然后再观察一下发现异或有一些可以使用的规律。
比如1 0 1 0 1 0 1 加粗的1是这个区间的最大值,称它为中点吧,我们先计算从中点左边第一个数字往右边一个一个异或,然后算有x个1和y个0,接着从中点开始往右边异或,如果是1的话 ,那么这一位的统计数加上(y+1)(在纸上算一下就可以),如果是0的话应该加上(x),计算完后这一位要乘上这个区间的最大值再乘上这是第几位(也就是2的多少次方)。最后就是答案了。
#include<cmath>#include<algorithm>#include<cstring>#include<string>#include<set>#include<map>#include<time.h>#include<cstdio>#include<vector>#include<stack>#include<queue>#include<iostream>using namespace std;#define LONG long longconst int INF=0x3f3f3f3f;const LONG MOD=1e9+61;const double PI=acos(-1.0);#define clrI(x) memset(x,-1,sizeof(x))#define clr0(x) memset(x,0,sizeof x)#define clr1(x) memset(x,INF,sizeof x)#define clr2(x) memset(x,-INF,sizeof x)#define EPS 1e-10LONG A[100010] ;LONG Pre[34][100100] ;int p ;struct Stac{ int l , r ; LONG val ;}stac[200010];int one[200100];void Push(int x){ while(1) { if(p <= 0) break ; int y = one[p] ; if( stac[y].val > stac[x].val ) break ; stac[y].r = x - 1; stac[x].l = stac[y].l; p -- ; } one[++p] = x ;}int main(){ int T; cin>>T; while(T--) { p = 0; int n ; cin>>n; for(int i = 1 ; i<= n ;++i) scanf("%lld",&A[i]), stac[i].val = A[i] , stac[i].l = stac[i].r = i ; stac[n+1].val = INF; stac[n+1].l = stac[n+1].r = n + 1; for(int i = 0 ; i <= 31 ;++ i) { Pre[i][0] = 0; for(int j = 1 ; j <= n ;++ j) Pre[i][j] = Pre[i][j-1] ^ ( (A[j]>>i) & 1 ) ; } for(int i =1 ; i<= n + 1; ++ i) Push( i ) ; LONG ans = 0; for(int i = 1 ; i<= n ; ++ i ) { LONG res = 0; for(int k = 0 ; k <= 31 ; ++ k) { LONG tmp1 = 0, tmp2 = 0; LONG cnt = 0; for(int j = stac[i].l ; j <= i - 1; ++ j) { if(Pre[k][i - 1] ^ Pre[k][j-1])tmp1 ++ ; else tmp2 ++ ; } for(int j = i ; j<= stac[i].r ; ++ j) if(Pre[k][j]^Pre[k][i-1]) cnt += (tmp2 + 1) ; else cnt += tmp1 ; res += ((cnt% MOD ) *(1ll<<k) % MOD ) * stac[i].val; res %=MOD; } ans +=res; ans %= MOD; } cout<<ans<<endl; }}
阅读全文
1 0
- BZOJ4750 密码安全
- [bzoj4750]密码安全
- BZOJ4750 密码安全
- BZOJ4750 密码安全
- 安全密码
- 密码安全
- 安全密码
- 安全密码
- 密码的安全
- 让密码更安全
- 密码安全和资源配置
- 密码安全验证
- 旧话重提,关于密码安全!
- Oracle EBS密码安全
- 密码安全控件搜集
- 扯扯密码安全
- 密码安全程度进度条
- coj 1262: 安全密码
- Codeforces 834C The Meaningless Game【思维】
- 父元素没设置高度子元素自适应高度
- Nginx反向代理以及缓存
- hdu1198 dfs
- 一些输入输出函数
- BZOJ4750 密码安全
- 有用的软件、工具、资料地址记录
- Linux ssh 命令常用用法小结
- Farm Irrigation 【三维数组搜索】
- Linux学习-服务器B挂载服务器A的文件夹
- FZU 1074 数位dp+二分
- 织梦PC端自动跳转移动端
- gradle无法更新
- 地址