题目

$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. Java8 新特性 Stream() API

    新特性里面为什么要加入流Steam() 集合是Java中使用最多的API,几乎每一个Java程序都会制造和处理集合.集合对于很多程序都是必须的,但是如果一个集合进行,分组,排序,筛选,过滤...这些操 ...

  2. 基础知识---委托和 lambda

    委托定义类型,类型指定特定方法签名. 可将满足此签名的方法(静态或实例)分配给该类型的变量,然后(使用适当参数)直接调用该方法,或将其作为参数本身传递给另一方法再进行调用. 以下示例演示了委托的用法. ...

  3. mac下安装和运行redis

    第一部分:安装    第一步:直接从官网下载**.tar.gz这个包.并用tar -zxvf **.tar.gz -C 指定目录 示例命令: tar -zxvf redis-5.0.5.tar.gz ...

  4. Dozer JAVA的POJO 映射工具

    Dozerhttp://www.manongjc.com/article/50949.html JAVA的映射工具 BeanUtils dozer的使用方法https://blog.csdn.net/ ...

  5. Runtime.addShutdownHook()(译)

    序言: 每一个Java程序都可以为JVM增加一个关闭钩子.JVM将在关闭之前执行关闭钩子中的指令. 问题: 一个程序可能需要在退出前执行一些指令.程序可能由于下列原因而退出: 所有的线程已经执行完毕 ...

  6. JS 对象属性名排序

    问题,对象属性名排序,如: var data = { A:[], D:[], B:{} } 调整为=> var data = { A:[], B:[], D:{} } 方法一: for,in,把 ...

  7. 简单的sql语句汇总(sqlserver)

    1.修改字段的默认值 alter table 表名 add default 默认值 for 字段名称 例子: for Age; alter table 表名 add constraint DF_TAB ...

  8. SpringBoot2.0整合fastjson的正确姿势

            SpringBoot2.0如何集成fastjson?在网上查了一堆资料,但是各文章的说法不一,有些还是错的,可能只是简单测试一下就认为ok了,最后有没生效都不知道.恰逢公司项目需要将J ...

  9. Excel分列,Excel 列拆分,Excel根据分隔符号拆分某列

    解决方案: https://zhidao.baidu.com/question/572807483.html 步骤:数据--分列--下一步--其它---下一步-- 注意的此操作会覆盖当前列和后n列(根 ...

  10. metrics-server 安装问题解决

    参考:  https://www.qikqiak.com/post/install-metrics-server/   git clone https://github.com/kubernetes- ...