#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define maxn 100005
#define maxk 256
int n,type,ans,sum,a[maxn],f[maxk][maxk],g[maxk][maxk];
bool v[maxk];
char st[];
void read(int &x){
x=; int f=; char ch;
for (ch=getchar();!isdigit(ch);ch=getchar()) if (ch=='-') f=-;
for (;isdigit(ch);ch=getchar()) x=x*+ch-''; x*=f;
}
int hs(int x,int y){
if (st[]=='o') return x|y;
if (st[]=='a') return x&y;
if (st[]=='x') return x^y;
}
int main(){
read(n),scanf("%s",st+),read(type);
for (int i=;i<=n;i++) read(a[i]);
for (int i=;i<=n;i++){
int k=a[i]&;
if (i>){
sum=ans=;
for (int j=;j<;j++){
if (g[j][k]==) continue;
if ((f[j][k]|(hs(j,a[i]>>)<<))==ans) sum+=g[j][k];
if ((f[j][k]|(hs(j,a[i]>>)<<))>ans) ans=f[j][k]|(hs(j,a[i]>>)<<),sum=g[j][k];
}
if (type==) printf("%d %d\n",ans,sum);
else printf("%d\n",ans);
}
for (int j=;j<;j++){
if (f[a[i]>>][j]==hs(j,k)) g[a[i]>>][j]++;
if (f[a[i]>>][j]<hs(j,k)) f[a[i]>>][j]=hs(k,j),g[a[i]>>][j]=;
}
}
return ;
}

题目链接:http://begin.lydsy.com/JudgeOnline/problem.php?id=3014。

题目大意:给定一种运算,为or,ans,xor中的一种,以及一个长度为n的序列,第i个数为ai,我们设第i个人与第j个人的友好度为ai与aj位运算,这种位运算是题目给定的,求第2个人到第n个人与其左边的人友好程度的最大值及达到该最大值的方案数。n<=100000;ai<=2^16;

做法:如果考虑暴力做,因为ai小于等于2^16,所以暴力做可以做到加入O1,而查询O(2^16),显然是不可以的,然而O(2^8*n)是可以过此题的,根据莫队算法的思想,我可以平衡这种暴力,使得两种操作都达到根号n的复杂度。

正解:我们考虑DP,设f[i][j]表示前8位为i,后8位为j位运算后使得后8位的最大值及方案数,怎么做呢,我们在加入一个数时,我们枚举j,设该数前8位为a,后8位为b,我们用j~b(~表示位运算)来更新f[a][j],查询时,设该数前8位为a,后8位为b,我们可以枚举i用f[i][b]|((i~a)<<8)更新答案即可,复杂度为O(2^8*n)。

dp。

[Noi2016十连测第五场]二进制的世界的更多相关文章

  1. [Noi2016十连测第三场]线段树

    #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> ...

  2. Problem C: [noip2016十连测第五场]travel (构造+贪心)

    题面 https://www.lydsy.com/JudgeOnline/upload/201610/statements(1).pdf 题解 好神仙的贪心-- 首先无解的情况很容易判断,就是\(l= ...

  3. NOI十连测 第五测 T2

    思路:考虑建立可持久化线段树,第一层维护的是i这个位置的next位置,第二层,维护的是接下来走这个字符会到哪个节点. 感觉很巧妙啊,不愧是Claris #include<algorithm> ...

  4. NOI十连测 第五测 T1

    #include<cstdio> #include<cstring> #include<cmath> #include<iostream> #inclu ...

  5. 【正睿oi省选十连测】第一场

    四小时写了两个暴力??自闭 [原来这就是神仙们的分量Orz rank 56/75 可以说是无比垃圾了 下周目标:进步十名?[大雾 T1 题意:有n个点的图 点有点权Ai 也有点权Bi = A_1 + ...

  6. ZROI2019 提高十连测

    额 掰手指头一数 特么又是第三年十连测了= = 2017一场没打 那时候好像一场比赛也就100人左右 2018前几场还都好好补了 后来开始放飞自我了 这时候一场有150人还多了 2019想让今年的No ...

  7. # NOI.AC省选赛 第五场T1 子集,与&最大值

    NOI.AC省选赛 第五场T1 A. Mas的童年 题目链接 http://noi.ac/problem/309 思路 0x00 \(n^2\)的暴力挺简单的. ans=max(ans,xor[j-1 ...

  8. HDU(4528),BFS,2013腾讯编程马拉松初赛第五场(3月25日)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=4528 小明系列故事——捉迷藏 Time Limit: 500/200 MS (Java/O ...

  9. noi.ac 第五场第六场

    t1应该比较水所以我都没看 感觉从思路上来说都不难(比牛客网这可简单多了吧) 第五场 t2: 比较套路的dp f[i]表示考虑前i个数,第i个满足f[i]=i的最大个数 i能从j转移需要满足 j< ...

随机推荐

  1. js,onblur后下一个控件获取焦点判断、html当前活跃控件、jquery版本查看、jquery查看浏览器版本、setTimeout&setInterval

    需求: input控件在失去焦点后直接做验证,验证通不过的话,显示相应错误.但是如果失去焦点后点击的下个控件是比较特殊的控件(比如,退出系统),那么不执行验证操作,直接退出系统(防止在系统退出前,还显 ...

  2. 错题724-java

    1.代码片段: byte b1=1,b2=2,b3,b6; final byte b4=4,b5=6; b6=b4+b5; b3=(b1+b2); System.out.println(b3+b6); ...

  3. Linux 信号详解三(sleep,raise)

    sleep()函数 .sleep()函数作用:让进程睡眠 .能被信号打断,然后处理信号函数以后,就不再睡眠,直接向下执行代码 .sleep函数的返回值是剩余秒数 //sleep 函数 #include ...

  4. React Native中设计主题机制

    昨天和同事讨论组件隔离性的时候讨论到关于默认样式的问题:很多情况下我们希望能够把组件设计为通用的,然后在具体项目中给他们指定一些通用的样式,譬如:背景颜色.默认字体等等.这听起来在CSS下运作起来就很 ...

  5. 初用protobuf-csharp-port

    下面这个用法是参照protobuf-csharp-port的官方wiki,参见: https://code.google.com/p/protobuf-csharp-port/wiki/Getting ...

  6. Ubuntu Terminal Shortcut

    Not all of the shortcuts are useful.Only remeber the most useful. 移动类Ctrl + a  - Jump to the start o ...

  7. 让所有的浏览器都支持html5

    <!--[if lt IE 9]> <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js" ...

  8. canvas缓动2

    同之前的缓动原理.这里将终点换成鼠标,做出跟随效果 var canvas = document.getElementById("canvas"); var cxt=canvas.g ...

  9. session超时设置

    session的设置方法有三种: 1.直接在应用服务器中设置 如果是Tomcat,可以在Tomcat目录下conf/web.xml中找到<session-config>元素,tomcat默 ...

  10. git 查看生成对象

    1. find .   查看目录中所有对象 2. find .git/objects 查看所有对象 3. git cat-file -p 散列值  输出文件内容