【JZOJ5738】【20190706】锁屏杀
题目

.png)
.png)
$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】锁屏杀的更多相关文章
- 调整Kali Linux的锁屏时间
调整Kali Linux的锁屏时间 锁屏是保护隐私的一种重要机制.当用户不操作电脑一段时间后,系统会进入锁屏状态.用户需要输入口令,才能重新进入系统.避免因为操作人员离开电脑后,被其他人员利用现有 ...
- Android锁屏后数据改变的解决方案
如果一个界面设置成横屏,那么锁屏再开启之后,会重新执行一遍onCreate()方法.对于这个问题的解决方案如下: 只需要在Menifest文件的activity相应标签下添加这行代码即可: andro ...
- Win10 锁屏图片 路径
Win10锁屏图片非常漂亮,下面是获得这些图片的方法: 一. 找到这个路径 C:\Users\UserName\AppData\Local\Packages\Microsoft.Windows.Con ...
- qt qml 九宫格划指锁屏视图
九宫格划指锁屏视图Lisence: MIT, 请保留本文档说明Author: surfsky.cnblogs.com 2015-02 [先看效果] [下载] http://download.csdn. ...
- WP 手机Lumia 820 锁屏密码的破解研究
Windows Phone lumia 手机锁屏密码的破解研究 大家好今天给大家分享一个最新研究案例, 近日笔者接Nokia Lumia 820, 由于客户密码失误太多,导致锁屏23000余分 ...
- 使用恶意USB设备解锁 Windows & Mac 锁屏状态
NSA专业物理入侵设备——USB Armory,可解锁任意锁屏状态的下的Windows和Mac操作系统,含最新发布的Windows10.及较早的Mac OSX El Capitan / Maveric ...
- 【腾讯Bugly干货分享】浅谈Android自定义锁屏页的发车姿势
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57875330c9da73584b025873 一.为什么需要自定义锁屏页 锁屏 ...
- 【WP 8.1开发】一键锁屏
在WP8的时候,关于如何关闭屏幕,国内外都有不少文章了,大家有兴趣地可以搜搜,很多,我就不给链接了,因为稍后我的例子中会有. 其实,关闭屏幕是调用了未开放的API,正因为这个API未开放的,不敢保证所 ...
- web桌面程序之锁屏功能分析
这是一个在操作系统里比较常见的功能,但在web里实现,有哪些需要注意的呢? 1.如何真正的实现锁屏? 2.如何避免通过技术手段绕过锁屏? 我个人总结出2点需要特别注意的地方,下面就分别进行分析. 第一 ...
随机推荐
- 通过IP获取MAC地址例子(应用层)
博客地址:http://home.cnblogs.com/u/zengjianrong/ 由于某种需求,需要获取某个ip的mac地址,在应用层实现例子如下代码. 流程:1. 先遍历arp表,若存在对应 ...
- DNS 服务器无法正常解析时,可以尝试这样!
DNS 服务器无法正常解析时,可以尝试这样! ========================================================================联通:12 ...
- Prometheus 监控目标运行状态并邮件通知
Prometheus 监控目标运行状态并邮件通知 邮件服务安装:https://www.cnblogs.com/xiangsikai/p/9809654.html 告警规则示例:https://pro ...
- Neo4j 第八篇:投射和过滤
投射子句用于定义如何返回数据集,并可以对返回的表达式设置别名,而过滤子句用于对查询的结果集按照条件进行过滤 一,Return子句 使用return子句返回节点,关系和关系. 1,返回节点 MATCH ...
- Mysql系列(十一)—— 性能分析慢查询日志
转载自:http://www.cnblogs.com/kerrycode/p/5593204.html 慢查询日志概念 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响 ...
- [转] Performance_js中计算网站性能监控利器
1.Performance方法 Performance提供的方法可以灵活使用,获取到页面加载等标记的耗时情况. performance.now() //返回当前到页面打开时刻的耗时,精确到千分之一毫秒 ...
- Flink基本的API(续)
上一篇介绍了编写 Flink 程序的基本步骤,以及一些常见 API,如:map.filter.keyBy 等,重点介绍了 keyBy 方法.本篇将继续介绍 Flink 中常用的 API,主要内容为 指 ...
- (一)RFB协议概述
(文章是基于刚刚做过的一个项目,对相关知识点进行总结回顾.主要内容均是对之前收集资料的总结概括,很多内容转载自其它地方.因为时间比较长,没有一一记录转载地址,特此感谢!) 一.简介 RFB(远程帧缓冲 ...
- Asp.NetCoreWebApi入门 - 从零开始新建api项目
开发环境 打开VS,建立项目 项目结构 修改 StartUp 类代码 ConfigureServices方法 Configure方法 为开发环境和生产环境配置不同的 Startup 新建一个Contr ...
- Java开源工具
git/ jenkins/ selenium/Spock/ 软件测试框架