题目

$n \le 2000 $

题解

  • \(B\)的数字可以对1440取模,对三个图分别进行\(dp\)即可
  • 时间复杂度\(O(n\times 1440 \times 10)\)

Code

#include<bits/stdc++.h>
#define il inline
using namespace std;
const int N=2100,P=1440;
int n,cnt[128],F[P],G1[P],G2[P],mp[N],a[N][10];
char S[7][N];
int num[10][5]={
{127,65,65,127,0},
{0,0,0,127,0},
{121,73,73,79,0},
{73,73,73,127,0},
{15,8,8,127,0},
{79,73,73,121,0},
{127,73,73,121,0},
{1,1,1,127,0},
{127,73,73,127,0},
{79,73,73,127,0}
};
il void upd(int&x,int y){if(x>y)x=y;}
il int get(int x,int y){
int re=0;
for(int i=0;i<5;++i)re+=cnt[mp[x+i]^num[y][i]];
return re;
}
void init(){
scanf("%d",&n);
for(int i=6;~i;--i)scanf("%s",S[i]+1); for(int i=1,x;i<=n;mp[i++]=x)
for(int j=x=0;j<7;++j)
x=x<<1|(S[j][i]=='X');
mp[n+1]=0; memset(a,1,sizeof(a));
for(int i=1;i<=n-3;++i)
for(int j=0;j<10;++j)
a[i][j]=get(i,j);
}
void solve2(int *re){
static int f[N][P],g[N],s[N];
memset(f,1,sizeof(f));
memset(g,1,sizeof(g));
memset(s,1,sizeof(s));
init(); s[0]=0;
for(int i=0;i<=n;++i){
int t=cnt[mp[i+1]];
s[i+1]=s[i]+t; upd(g[i+1],g[i]+t);
upd(g[i+5],s[i]+a[i+1][0]);
for(int j=1;j<10;++j){
upd(f[i+5][j],s[i]+a[i+1][j]);
}
for(int j=0;j<P;++j){
upd(f[i+1][j],f[i][j]+t);
for(int k=0;k<10;++k){
upd(f[i+5][(j*10+k)%P],f[i][j]+a[i+1][k]);
}
} } for(int i=1;i<P;++i)re[i]=f[n+1][i];
re[0]=min(g[n+1],f[n+1][0]);
}
void solve1(int *re){
static int l[N][3],L[N][24],r[N][10],R[N][60],s[N];
init();
memset(l,1,sizeof(l));
memset(r,1,sizeof(r));
memset(L,1,sizeof(L));
memset(R,1,sizeof(R));
memset(s,1,sizeof(s)); s[0]=0;
for(int i=0;i<=n;++i){
int t=cnt[mp[i+1]];
s[i+1]=s[i]+t;
for(int j=0;j<3;++j){
upd(l[i+1][j],l[i][j]+t);
upd(l[i+5][j],s[i]+a[i+1][j]);
}
for(int j=0;j<10;++j){
upd(L[i+1][j],L[i][j]+t);
upd(L[i+1][10+j],L[i][10+j]+t);
upd(L[i+5][j],l[i][0]+a[i+1][j]);
upd(L[i+5][10+j],l[i][1]+a[i+1][j]);
}
for(int j=0;j<4;++j){
upd(L[i+1][20+j],L[i][20+j]+t);
upd(L[i+5][20+j],l[i][2]+a[i+1][j]);
}
} s[n+1]=s[n+2]=0;
for(int i=n;i;--i){
int t=cnt[mp[i]];
s[i]=s[i+1]+t;
for(int j=0;j<10;++j){
upd(r[i][j],r[i+1][j]+t);
upd(r[i][j],a[i][j]+s[i+5]);
}
for(int j=0;j<6;++j)
for(int k=0;k<10;++k){
int x=10*j+k;
upd(R[i][x],R[i+1][x]+t);
upd(R[i][x],a[i][j]+r[i+5][k]);
}
} for(int i=0;i<24;++i)
for(int j=0;j<60;++j){
int t=0x3f3f3f3f;
for(int k=1;k<=n+1;++k)
upd(t,L[k-1][i]+R[k+2][j]+cnt[mp[k]^20]+cnt[mp[k+1]]);
re[i*60+j]=t;
}
}
void getans(){
int re=0x3f3f3f3f;
for(int i=0;i<P;++i)
for(int j=0;j<P;++j){
int t=j-i;if(t<0)t+=P;
upd(re,G1[i]+G2[j]+F[t]);
}
cout<<re<<endl;
}
int main(){
freopen("joke.in","r",stdin);
freopen("joke.out","w",stdout);
for(int i=1;i<128;++i)cnt[i]=cnt[i>>1]+(i&1);
solve1(G1);
solve2(F);
solve1(G2);
getans();
return 0;
}

【JZOJ5738】【20190706】锁屏杀的更多相关文章

  1. 调整Kali Linux的锁屏时间

    调整Kali Linux的锁屏时间   锁屏是保护隐私的一种重要机制.当用户不操作电脑一段时间后,系统会进入锁屏状态.用户需要输入口令,才能重新进入系统.避免因为操作人员离开电脑后,被其他人员利用现有 ...

  2. Android锁屏后数据改变的解决方案

    如果一个界面设置成横屏,那么锁屏再开启之后,会重新执行一遍onCreate()方法.对于这个问题的解决方案如下: 只需要在Menifest文件的activity相应标签下添加这行代码即可: andro ...

  3. Win10 锁屏图片 路径

    Win10锁屏图片非常漂亮,下面是获得这些图片的方法: 一. 找到这个路径 C:\Users\UserName\AppData\Local\Packages\Microsoft.Windows.Con ...

  4. qt qml 九宫格划指锁屏视图

    九宫格划指锁屏视图Lisence: MIT, 请保留本文档说明Author: surfsky.cnblogs.com 2015-02 [先看效果] [下载] http://download.csdn. ...

  5. WP 手机Lumia 820 锁屏密码的破解研究

    Windows Phone lumia 手机锁屏密码的破解研究     大家好今天给大家分享一个最新研究案例, 近日笔者接Nokia Lumia 820, 由于客户密码失误太多,导致锁屏23000余分 ...

  6. 使用恶意USB设备解锁 Windows & Mac 锁屏状态

    NSA专业物理入侵设备——USB Armory,可解锁任意锁屏状态的下的Windows和Mac操作系统,含最新发布的Windows10.及较早的Mac OSX El Capitan / Maveric ...

  7. 【腾讯Bugly干货分享】浅谈Android自定义锁屏页的发车姿势

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57875330c9da73584b025873 一.为什么需要自定义锁屏页 锁屏 ...

  8. 【WP 8.1开发】一键锁屏

    在WP8的时候,关于如何关闭屏幕,国内外都有不少文章了,大家有兴趣地可以搜搜,很多,我就不给链接了,因为稍后我的例子中会有. 其实,关闭屏幕是调用了未开放的API,正因为这个API未开放的,不敢保证所 ...

  9. web桌面程序之锁屏功能分析

    这是一个在操作系统里比较常见的功能,但在web里实现,有哪些需要注意的呢? 1.如何真正的实现锁屏? 2.如何避免通过技术手段绕过锁屏? 我个人总结出2点需要特别注意的地方,下面就分别进行分析. 第一 ...

随机推荐

  1. 准备环境 安装window10+ubuntu18双系统

    记录一下这次双硬盘安装windows10和Ubuntu18的过程 1通过u启通制作pe,并将windows的镜像放入到u盘中 2电脑通过u盘启动,进入pe 3在pe中将两块固态硬盘制作为guid格式, ...

  2. 使用thanos管理Prometheus持久化数据

    关于thanos的介绍可以参考这篇官方博客的翻译文档,本文不作部署操作介绍.下图是thanos的官方架构图,主要有5个组件: Query:可以近似看作是Prometheus的实现,用于采集其他组件的数 ...

  3. ROS消息vs服务

    1.ROS包消息/服务模式与要点 从功能上看,ROS包是信息交互和处理的基本单元.根据信息的交互和处理方式,ROS包有以下两大类: 消息发布者与订阅者 服务器与客户端 对于消息模式的包,信息的提供者主 ...

  4. Portainer容器可视化管理工具使用文档

    本文内容 主要介绍下Portainer的Docker使用方式,基于当前最新版v1.22.1,使用Docker的本地部署,并连接另一台服务器进行测试,更多请参考官网https://www.portain ...

  5. Spring Security 入门—内存用户验证

    简介 作为 Spring 全家桶组件之一,Spring Security 是一个提供安全机制的组件,它主要解决两个问题: 认证:验证用户名和密码: 授权:对于不同的 URL 权限不一样,只有当认证的用 ...

  6. C# Newtonsoft.Json.JsonReaderException:“Could not convert string to decimal:

    使用Newtonsoft.Json,报以上错误,问题的原因是有"",把“”替换成null: 以前的json: [{"WengvNj":"df5c38c ...

  7. python动态视频下载器

    这里向大家分享一下python爬虫的一些应用,主要是用爬虫配合简单的GUI界面实现视频,音乐和小说的下载器.今天就先介绍如何实现一个动态视频下载器. 爬取电影天堂视频 首先介绍的是python爬取电影 ...

  8. 用Python分析国庆旅游景点,告诉你哪些地方好玩、便宜、人又少

    注:本人参考“裸睡的猪”公众号同名文章,学习使用. 一.目标 使用Python分析出国庆哪些旅游景点:好玩.便宜.人还少的地方,不然拍照都要抢着拍! 二.获取数据 爬取出行网站的旅游景点售票数据,反映 ...

  9. English--元音

    English|元音 在一开始学习英语的时候,最需要掌握的就是音标.所以需要从音标的元音开始,并且不局限于掌握音标的元音与辅音,大家可以参考下英文版发音课,并不知道只学习元音与辅音,还有各种弱读连读等 ...

  10. 藏红花StigmaCroci西红花StigmaCroci番红花

    伊朗藏红花(StigmaCroci)是一种耐旱植物,适于生长在冬季最低气温不低于零下20度,夏季最高气温不高于零上35度且气候干燥的地区. 因其水土和气候条件的限制,除了伊朗能大量种植外,希腊.印度. ...