博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ3273 : liars
阅读量:6185 次
发布时间:2019-06-21

本文共 800 字,大约阅读时间需要 2 分钟。

枚举每个人,计算他必定是诚实者的情况下至少有几个人说谎,若超过$t$则他肯定是说谎者。

对于至少有几个人说谎,区间信息可以合并:

每个区间维护最左最右两个人$l,r$以及$f[i][j]$表示$l$和$r$诚实说谎状态分别为$i,j$时他们之间至少几个人说谎。

利用前缀和、后缀和可以在$O(1)$时间内求出每个人必定诚实时至少有几个人说谎。

时间复杂度$O(n)$。

 

#include
#define rep(i) for(int i=0;i<2;i++)const int N=100010,inf=100000000;inline void up(int&a,int b){a>b?(a=b):0;}int Case,n,m,i,ans,mi,a[N];struct P{ int l,r,f[2][2]; void set(int x){ l=r=x; rep(i)rep(j)f[i][j]=inf; f[0][0]=0; f[1][1]=1; } void must(int x){ l=r=x; rep(i)rep(j)f[i][j]=inf; f[0][0]=0; } P operator+(const P&b){ P c; c.l=l,c.r=b.r; rep(i)rep(j)c.f[i][j]=inf; rep(i)rep(j)if(f[i][j]
1)tmp=tmp+pre[i-1]; tmp=tmp+e[i]; if(tmp.f[0][0]>m)ans++,mi=i; } printf("%d %d\n",ans,mi); } return 0;}

  

转载地址:http://lfoda.baihongyu.com/

你可能感兴趣的文章
FPGA开发心得
查看>>
socket学习笔记——select函数的使用(windows)
查看>>
CentOS 6.5下samba服务器搭建与配置
查看>>
CentOS 6.5开放端口方法
查看>>
Java 内存分配策略
查看>>
[Todo] Nodejs学习及Spider实验(包括php入门学习、React入门学习)
查看>>
笔记本在安装Windows+Linux双系统后,进入Windows时花屏的解决办法
查看>>
【转】百度面试
查看>>
java集合框架
查看>>
智课雅思词汇---十六、前缀hyper和hypo是反义词
查看>>
AsyncTask2
查看>>
区间覆盖(线段树)
查看>>
java读取excel
查看>>
html_之css
查看>>
读书技巧
查看>>
select有条件in要按照in中的数据排序
查看>>
a各种状态
查看>>
Boostrap常用组件英文名
查看>>
python局部赋值规则
查看>>
Notepad++的列编辑功能
查看>>