BZOJ3873 : [Ahoi2014]拼图
如果答案在某个碎片内部,那么直接悬线法解决,时间复杂度$O(n\sum)$。
如果$n$比较大,那么$\sum$比较小。
求出每个点向上能延伸的长度,枚举每个点向上这条线段作为短板。
算出完全可选的碎片的长度之和以及不能完全选,左边右边最大次大延伸距离,更新答案。
时间复杂度$O(n\sum^2)$。
如果$n$比较小,那么暴力枚举上下边界,计算答案方法同上。
时间复杂度$O(n^2\sum)$。
总时间复杂度$O(n\sum\sqrt{n\sum})$。
- #include<cstdio>
- const int N=100010,M=320;
- int T,num,n,m,i,j,k,x,cnt,FL0,GL,FL1,FR0,GR,FR1,ans;
- inline void up(int&f0,int&g0,int&f1,int x,int y){
- if(x>f0){f1=f0,f0=x,g0=y;return;}
- if(x>f1)f1=x;
- }
- inline void uans(int x){if(ans<x)ans=x;}
- namespace NSMALL{
- int st[N],en[N],f[N],g[N],w[N];char a[M][N],s[N];
- void solve(){
- for(i=1;i<=num;i++){
- scanf("%d",&x);
- st[i]=m+1;
- en[i]=m+x;
- for(j=1;j<=n;j++){
- scanf("%s",s);
- for(k=0;k<x;k++)a[j][k+st[i]]=s[k]-'0';
- }
- m+=x;
- }
- for(i=1;i<=m;i++)f[i]=1,g[i]=m,w[i]=0;
- for(i=1;i<=n;i++){
- for(GL=j=1;j<=m;j++)if(!a[i][j]){
- w[j]++;
- if(GL>f[j])f[j]=GL;
- }else w[j]=0,f[j]=1,g[j]=m,GL=j+1;
- for(GR=j=m;j;j--)if(!a[i][j]){
- if(GR<g[j])g[j]=GR;
- uans(w[j]*(g[j]-f[j]+1));
- }else GR=j-1;
- }
- for(i=1;i<=n;i++){
- for(k=1;k<=num;k++)f[k]=en[k],g[k]=st[k];
- for(j=i;j<=n;j++){
- cnt=FL0=GL=FL1=FR0=GR=FR1=0;
- for(k=1;k<=num;k++){
- for(x=st[k];x<=en[k];x++)if(a[j][x])break;
- if(f[k]>x-1)f[k]=x-1;
- for(x=en[k];x>=st[k];x--)if(a[j][x])break;
- if(g[k]<x+1)g[k]=x+1;
- if(f[k]==en[k]){cnt+=en[k]-st[k]+1;continue;}
- up(FL0,GL,FL1,f[k]-st[k]+1,k);
- up(FR0,GR,FR1,en[k]-g[k]+1,k);
- }
- if(GL!=GR)uans((j-i+1)*(cnt+FL0+FR0));else{
- uans((j-i+1)*(cnt+FL0+FR1));
- uans((j-i+1)*(cnt+FL1+FR0));
- }
- }
- }
- }
- }
- namespace NBIG{
- int st[M],en[M],f[M],g[M],w[M];char a[N][M],s[M];
- void solve(){
- for(i=1;i<=num;i++){
- scanf("%d",&x);
- st[i]=m+1;
- en[i]=m+x;
- for(j=1;j<=n;j++){
- scanf("%s",s);
- for(k=0;k<x;k++)a[j][k+st[i]]=s[k]-'0';
- }
- m+=x;
- }
- for(i=1;i<=m;i++)f[i]=1,g[i]=m,w[i]=0;
- for(i=1;i<=n;i++){
- for(GL=j=1;j<=m;j++)if(!a[i][j]){
- w[j]++;
- if(GL>f[j])f[j]=GL;
- }else w[j]=0,f[j]=1,g[j]=m,GL=j+1;
- for(GR=j=m;j;j--)if(!a[i][j]){
- if(GR<g[j])g[j]=GR;
- uans(w[j]*(g[j]-f[j]+1));
- }else GR=j-1;
- }
- for(i=1;i<=m;i++)w[i]=0;
- for(i=1;i<=n;i++){
- for(j=1;j<=m;j++)if(a[i][j])w[j]=0;else w[j]++;
- for(j=1;j<=m;j++)if(w[j]){
- cnt=FL0=GL=FL1=FR0=GR=FR1=0;
- for(k=1;k<=num;k++){
- for(x=st[k];x<=en[k];x++)if(w[x]<w[j])break;
- f[k]=x-1;
- for(x=en[k];x>=st[k];x--)if(w[x]<w[j])break;
- g[k]=x+1;
- if(f[k]==en[k]){cnt+=en[k]-st[k]+1;continue;}
- up(FL0,GL,FL1,f[k]-st[k]+1,k);
- up(FR0,GR,FR1,en[k]-g[k]+1,k);
- }
- if(GL!=GR)uans(w[j]*(cnt+FL0+FR0));else{
- uans(w[j]*(cnt+FL0+FR1));
- uans(w[j]*(cnt+FL1+FR0));
- }
- }
- }
- }
- }
- int main(){
- scanf("%d",&T);
- while(T--){
- scanf("%d%d",&num,&n);
- m=ans=0;
- if(n<=315)NSMALL::solve();else NBIG::solve();
- printf("%d\n",ans);
- }
- return 0;
- }
BZOJ3873 : [Ahoi2014]拼图的更多相关文章
- BZOJ 3873: [Ahoi2014]拼图
BZOJ 3873: [Ahoi2014]拼图 标签(空格分隔): OI-BZOJ OI-DP Time Limit: 10 Sec Memory Limit: 256 MB Description ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 「AHOI2014/JSOI2014」拼图
「AHOI2014/JSOI2014」拼图 传送门 看到 \(n \times m \le 10^5\) ,考虑根号分治. 对于 \(n < m\) 的情况,我们可以枚举最终矩形的上下边界 \( ...
- [AHOI2014/JSOI2014] 解题报告
[AHOI2014/JSOI2014] 奇怪的计算器 一个很关键的结论,任何时候每个数的相对大小是不变的. 于是可以把这个相对大小当成线段树的权值,每次只需要维护一下区间极值和tag就好了,关于操作四 ...
- bzoj3874&2832 [Ahoi2014]宅男计划 模拟退火,三分
[Ahoi2014&Jsoi2014]宅男计划 Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 962 Solved: 371[Submit][ ...
- [luogu] P4040 [AHOI2014/JSOI2014]宅男计划(贪心)
P4040 [AHOI2014/JSOI2014]宅男计划 题目背景 自从迷上了拼图,JYY就变成了个彻底的宅男.为了解决温饱问题,JYY不得不依靠叫外卖来维持生计. 题目描述 外卖店一共有N种食物, ...
- Bzoj 3874: [Ahoi2014&Jsoi2014]宅男计划 三分+贪心
3874: [Ahoi2014&Jsoi2014]宅男计划 Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 861 Solved: 336[Su ...
- 拼图小游戏之计算后样式与CSS动画的冲突
先说结论: 前几天写了几个非常简单的移动端小游戏,其中一个拼图游戏让我郁闷了一段时间.因为要获取每张图片的位置,用`<style>`标签写的样式,直接获取计算后样式再用来交换位置,结果就悲 ...
- JavaScript版拼图小游戏
慕课网上准备开个新的jQuery教程,花了3天空闲时间写了一个Javascript版的拼图小游戏,作为新教程配套的分析案例 拼图游戏网上有不少的实现案例了,但是此源码是我自己的实现,所以不做太多的比较 ...
随机推荐
- jpg Test
- mybatis配置问题
//当构造函数有多个参数时,可以使用constructor-arg标签的index属性,index属性的值从0开始. <bean id="sqlSession" class= ...
- 浅析 - iOS应用程序的生命周期
1.应用程序的状态 状态如下: Not running 未运行 程序没启动 Inactive 未激活 程序在前台运行,不过没有接收到事件.在没有事件处理情况下程序通 ...
- 001课-java_web开发入门
一.Tomcat服务器常见启动问题:(1).Java_home环境变量,由于tomcat服务器的bin目录中的一些jar文件必须使用到java类库,所以必须先配置Java_home环境变量.(2).端 ...
- jquery学习笔记-----ajax
$(selector).load( url [,date] [,callback] ) url:请求页面的url地址 date:发送至服务器的key:value数据 callback:请求完成时的回调 ...
- 自动复制转换StringBuffer
自动复制转换StringBuffer http://www.cnblogs.com/coqn/archive/2012/07/31/all_StringBuufer.html http://blog. ...
- Ext Js【Hello World】 ——4.1 beta 1
准备:vs+ExtJs4.1Beta1 ExtJS 4.1 xiazai_ https://yunpan.cn/cqv6bdBwtRjAj (提取码:2733) 引用,cs文件,js主入口,zh—c ...
- 使用python递归子目录处理日志文件
重要说明: (1)python使用4个空格进行层次缩进的(不是tab),在eclipse里面可以直接使用tab缩进,是因为eclipse会实时地将tab转成4个空格 (2)在eclipse中安装pyD ...
- HP SAN Switch光纖交換機命令行畫zone
有時候我們無法登陸網頁交互界面去操縱交換機,如下提供了命令行方式從交換機劃zone 1.創建別名 alicreate "SummaryDB_N", "211,14; 21 ...
- android 入门-android Studio git配置
以后在整理