【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点需要特别注意的地方,下面就分别进行分析. 第一 ...
随机推荐
- windows下xshell连接虚拟机的CentOS 7
1.虚拟机设置 2.虚拟机的“编辑”-“虚拟网络编辑器” 3.windows 中运行“cmd”,输入“ipconfig”查看ip,避免冲突 4.在虚拟机网络编辑器界面中,选择“VMnet8” 5.记住 ...
- Laravel自定义排序
如果数据库的status字段有0,1,2,3几种状态,如果想让status为1,2的状态排在最前面 那么可以这样: $obj = $obj->orderByRaw(DB::raw('FIELD( ...
- CountdownLatch例子
CountdownLatch 一个线程或者多个线程等待其他线程完成了再接着往下执行 public class CountDownLatchTest { ); private static Random ...
- 更新element-ui版本
1. 卸载当前版本 npm uninstall element-ui 2. 安装指定版本 npm -S
- 2019-11-29-C#-直接创建多个类和使用反射创建类的性能
原文:2019-11-29-C#-直接创建多个类和使用反射创建类的性能 title author date CreateTime categories C# 直接创建多个类和使用反射创建类的性能 li ...
- 阿里云监控RDS
RDS性能监控API https://help.aliyun.com/document_detail/26280.html?spm=a2c4g.11186623.6.1576.341d7159uzLD ...
- 【fiddler安装】解决“Creation of the root certificate was not successful.”的问题
问题:在安装过fiddler后,会出现“Creation of the root certificate was not successful.”的问题,这个是说证书安装不成功. 原因:在使用Fidd ...
- Spring Boot2(八):性感banner,在线发牌
本文在个人技术博客[鸟不拉屎]同步发布,详情可猛戳 亦可扫描文章末尾二维码关注个人公众号[鸟不拉屎] emmm,没有啥前言 玩过SpringBoot的都知道,SpringBoot启动的时候,默认会在控 ...
- 你的MES系统又失败了?正确的打开方式在这里
都知道MES实施艰难,真正成功的很少:有人戏称:10个MES,7个失败.1个不死不活.1个伪成功,最后一个仍需努力. 导致MES实施失败的原因有很多,所谓“成功的MES是一样的,失败的MES各有各的失 ...
- WorkFlow三:配BO对象,事件触发工作流
1.新建个BO对象的字段. 2.新建取数函数: 3.运行事物代码SWO1新建BO对象. 4.新建关键字段: 5.新建BO对象的事件: 6.添加处理方法: 6.调整对象状态,这里是本地对象,不需要释放, ...