【JZOJ5738】【20190706】锁屏杀
题目
$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点需要特别注意的地方,下面就分别进行分析. 第一 ...
随机推荐
- vertica单节点故障恢复 Startup Failed, ASR Required
测试环境的vertica是单节点的,无法做到故障自动恢复,需要手工处理.案例如下: 发现5433端口连接不上,vertica挂了,手工运行admintools,重新启动vertica,仍然失败,提示: ...
- 明解C语言 入门篇 第五章答案
练习5-1 /* 依次把1.2.3.4.5 赋值给数组的每个元素并显示(使用for语句) */ #include <stdio.h> int main(void) { int i; ]; ...
- Sitecore XP 8.2 新功能
Sitecore的®体验平台™ 8.2是最全面的更新最新的一个,平衡增强现有客户,而在同一时间提供了引人注目的新功能.你可以在这里阅读新闻稿,但我想对8.2中的一些重大变化给予一些额外的关注.作为奖励 ...
- sql server报【从varchar数据类型到datetime数据类型的转换产生一个超出范围的值】错误的解决办法
产生这个错误的原因是在使用convert函数将给定的日期字符串转换为日期类型的时候,因为datetime这个数据类型有时间数值的范围限定,当超出时间范围时就抛出这个错误. 如果类型是[datetime ...
- logger.error打印完整的错误堆栈信息
使用Spring Boot项目中的日志打印功能的时候,发现调用Logger.errror()方法的时候不能完全地打印出网站的错误堆栈信息,只能打印出这个错误是一个什么错误. 为什么呢,原因在于这个方法 ...
- Android Studio中的非项目文件及项目目录下的全局搜索
一.背景 项目开发中,AS(Android Studio)经常会用到通过关键字在项目空间下搜索对应结果.最经常用到的Find in Path.例如打开Find in Path后,可以选中Scope t ...
- mybatis 报Invalid bound statement(not found) 和 Property 'mapperLocations' was not specified or not matching resources found
排除问题的步骤: 1.首先检查mapper文件和mapper接口的文件名是否相等. 2.pom.xml是否把xml排除了,这样写就会src/main/java下所有的Mybatis的xml文件都删除, ...
- mvc中ViewBag返回数组如何循环显示数据
直接在for循环里面定义出viewbag @for (int i = 0; i < ViewBag.permission.Count; i++) { var permission = ViewB ...
- Windows Server - 用tomcat部署finereport
原博地址:https://blog.csdn.net/qq_39019865/article/details/80969728
- Delphi - Logs记录,函数实现MsgDsp
Logs记录-函数实现MsgDsp 大多数时候,我们不太希望消息以交互的形式出现,这个时候我们可以在窗体上放置一个Memo,然后单独开一个线程进行监视,从而实现把消息实时的显示出来,便于开发者分析. ...