[POI2015]CZA
p很小,讨论
p=0。。。
p=1。。。
p=2:n-1放左或者放右两种情况,剩下怎么放是固定的,模拟然后判断即可
p=3:
正着做要状压,类似放书和排座位那些题,考虑以某个顺序加入元素,不断扩充出整个环
不妨从n开始往下加,其实只用考虑i,i-1,i-2和要放的i-3的关系。i-3只能放在这三个的两个的中间,
所以这中间不能再有之前的i+1,i+2这种了。
而且区分左右还要记录顺逆
f[i][0/1][2^3]前i个,顺逆,相邻能不能放(是否紧相邻)
然后枚举放哪里转移,之后i会固定,看会不会和i-1,i-2,i-3冲突
转移时候大力分类讨论
// luogu-judger-enable-o2
#include<bits/stdc++.h>
#define reg register int
#define il inline
#define numb (ch^'0')
using namespace std;
typedef long long ll;
il void rd(int &x){
char ch;x=;bool fl=false;
while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);
(fl==true)&&(x=-x);
}
namespace Miracle{
const int N=+;
const int mod=1e9+;
int n,k,p;
int no[N][];//0:-3; 1:-2 ; 2:-1 ; 3:0 ; 4:1 ; 5:2 ; 6:3
int add(int x,int y){
return x+y>=mod?x+y-mod:x+y;
}
void sol0(){
if(n==) puts("");
else puts("");
}
void sol1(){
if(n==||(n==&&k==)) puts("");
else puts("");
}
int a[N];
void sol2(){
if(n<=){
if(n==||(n==&&k==)) puts("");
else puts("");
return;
}
int ans=;
a[]=n;
for(reg x=n-,i=;x>;++i,x-=) a[i]=x;
for(reg x=n-,i=n;x>;--i,x-=) a[i]=x;
bool fl=true;
for(reg i=;i<n;++i){
if(no[a[i]][a[i+]-a[i]+]) fl=false;
}
if(no[a[n]][a[]-a[n]+]) fl=false;
if(fl) ++ans; a[]=n;
for(reg x=n-,i=;x>;++i,x-=) a[i]=x;
for(reg x=n-,i=n;x>;--i,x-=) a[i]=x;
fl=true;
for(reg i=;i<n;++i){
if(no[a[i]][a[i+]-a[i]+]) fl=false;
}
if(no[a[n]][a[]-a[n]+]) fl=false;
if(fl) ++ans;
printf("%d",ans);
}
int f[N][][];
int dis(int x,int y){
return y-x+;
}
int mk(int s1,int s2,int s3){
return s3*+s2*+s1;
}
void calc(int i,int j,int s){//add i-1
int now=f[i][j][s];
int s1=s&,s2=(s>>)&,s3=(s>>)&;
if(i!=){
if(j==){//shun
if(s1){
if(s3){
if(no[i][dis(i,i+)]==&&no[i+][dis(i+,i-)]==) f[i-][j][mk(s2,,)]=add(f[i-][j][mk(s2,,)],now);
}
else{
if(no[i+][dis(i+,i-)]==) f[i-][j][mk(s2,,)]=add(f[i-][j][mk(s2,,)],now);
}
}
if(s2){
if((s1==||no[i+][dis(i+,i+)]==)&&(s3==||no[i][dis(i,i+)]==)) f[i-][j^][mk(,,)]=add(f[i-][j^][mk(,,)],now);
}
if(s3){
if((s1==||no[i+][dis(i+,i+)]==)&&(no[i-][dis(i-,i+)]==)) f[i-][j][mk(s2,,)]=add(f[i-][j][mk(s2,,)],now);
}
}
else{//j==1
if(s1){
if(s3){
if(no[i+][dis(i+,i)]==&&no[i-][dis(i-,i+)]==) f[i-][j][mk(s2,,)]=add(f[i-][j][mk(s2,,)],now);
}
else{
if(no[i-][dis(i-,i+)]==) f[i-][j][mk(s2,,)]=add(f[i-][j][mk(s2,,)],now);
}
}
if(s2){
if((s1==||no[i+][dis(i+,i+)]==)&&(s3==||no[i+][dis(i+,i)]==)) f[i-][j^][mk(,,)]=add(f[i-][j^][mk(,,)],now);
}
if(s3){
if((s1==||no[i+][dis(i+,i+)]==)&&(no[i+][dis(i+,i-)]==)) f[i-][j][mk(s2,,)]=add(f[i-][j][mk(s2,,)],now);
}
}
}else{//las
if(j==){
if(s1){
if((s3==||no[i][dis(i,i+)]==)&&(no[i+][dis(i+,i-)]==)&&(no[i-][dis(i-,i+)]==)&&(s2==||no[i+][dis(i+,i)]==)){
f[i-][j][mk(,,)]=add(f[i-][j][mk(,,)],now);
}
}
if(s2){
if((s3==||no[i][dis(i,i+)]==)&&(s1==||no[i+][dis(i+,i+)]==)&&(no[i+][dis(i+,i-)]==&&no[i-][dis(i-,i)]==)){
f[i-][j^][mk(,,)]=add(f[i-][j^][mk(,,)],now);
}
}
if(s3){
if((s1==||no[i+][dis(i+,i+)]==)&&(s2==||no[i+][dis(i+,i)]==)&&(no[i][dis(i,i-)]==&&no[i-][dis(i-,i+)]==)){
f[i-][j][mk(,,)]=add(f[i-][j][mk(,,)],now);
}
}
}
else{
if(s1){
if((s3==||no[i+][dis(i+,i)]==)&&(no[i-][dis(i-,i+)]==)&&(no[i+][dis(i+,i-)]==)&&(s2==||no[i][dis(i,i+)]==)){
f[i-][j][mk(,,)]=add(f[i-][j][mk(,,)],now);
}
}
if(s2){
if((s3==||no[i+][dis(i+,i)]==)&&(s1==||no[i+][dis(i+,i+)]==)&&(no[i-][dis(i-,i+)]==&&no[i][dis(i,i-)]==)){
f[i-][j^][mk(,,)]=add(f[i-][j^][mk(,,)],now);
}
}
if(s3){
if((s1==||no[i+][dis(i+,i+)]==)&&(s2==||no[i][dis(i,i+)]==)&&(no[i-][dis(i-,i)]==&&no[i+][dis(i+,i-)]==)){
f[i-][j][mk(,,)]=add(f[i-][j][mk(,,)],now);
}
}
}
}
}
void sol3(){
if(n<=){
if(n==||(n==&&k==)) puts("");
else puts("");
return;
}
if(n==){
int ans=;
if(no[n][dis(n,n-)]==&&no[n-][dis(n-,n-)]==&&no[n-][dis(n-,n)]==) ++ans;
if(no[n][dis(n,n-)]==&&no[n-][dis(n-,n-)]==&&no[n-][dis(n-,n)]==) ++ans;
printf("%d",ans);
return ;
}
f[n-][][]=;f[n-][][]=;
for(reg i=n-;i>=;--i){
for(reg s=;s<;++s){
if(f[i][][s]) calc(i,,s);
if(f[i][][s]) calc(i,,s);
}
}
int ans=;
for(reg s=;s<;++s){
ans=add(ans,add(f[][][s],f[][][s]));
}
printf("%d",ans);
}
int main(){
rd(n);rd(k);rd(p);
int x,y;
for(reg i=;i<=k;++i){
rd(x);rd(y);
if(abs(x-y)<=p){
no[x][y-x+]=;
}
}
if(p==) sol0();
else if(p==) sol1();
else if(p==) sol2();
else sol3();
return ;
} }
signed main(){
Miracle::main();
return ;
} /*
Author: *Miracle*
Date: 2019/3/3 10:02:45
*/
[POI2015]CZA的更多相关文章
- BZOJ 4385: [POI2015]Wilcze doły
4385: [POI2015]Wilcze doły Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 648 Solved: 263[Submit][ ...
- BZOJ 4384: [POI2015]Trzy wieże
4384: [POI2015]Trzy wieże Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 217 Solved: 61[Submit][St ...
- Bzoj 3747: [POI2015]Kinoman 线段树
3747: [POI2015]Kinoman Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 553 Solved: 222[Submit][Stat ...
- BZOJ 3747 POI2015 Kinoman 段树
标题效果:有m点,每个点都有一个权值.现在我们有这个m为点的长度n该序列,寻求区间,它仅出现一次在正确的点区间内值和最大 想了很久,甚至神标题,奔说是水的问题--我醉了 枚举左点 对于每个请求留点右键 ...
- [Poi2015]
[POI2015]Łasuchy 一看以为是sb题 简单来说就是每个人获得热量要尽量多 不能找别人 首先这道题好像我自己找不到NIE的情况 很容易想到一个优化 如果一个数/2>另一个数 那么一定 ...
- BZOJ_4378_[POI2015]Logistyka_树状数组
BZOJ_4378_[POI2015]Logistyka_树状数组 Description 维护一个长度为n的序列,一开始都是0,支持以下两种操作: 1.U k a 将序列中第k个数修改为a. 2.Z ...
- BZOJ_3747_[POI2015]Kinoman_线段树
BZOJ_3747_[POI2015]Kinoman_线段树 Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放 ...
- POI2015 解题报告
由于博主没有BZOJ权限号, 是在洛咕做的题~ 完成了13题(虽然有一半难题都是看题解的QAQ)剩下的题咕咕咕~~ Luogu3585 [POI2015]PIE Solution 模拟, 按顺序搜索, ...
- P3594 [POI2015]WIL-Wilcze doły
P3594 [POI2015]WIL-Wilcze doły 题目描述 给定一个长度为n的序列,你有一次机会选中一段连续的长度不超过d的区间,将里面所有数字全部修改为0.请找到最长的一段连续区间,使得 ...
随机推荐
- 如何使用chrome浏览器进行js调试找出元素绑定的点击事件
大家有没有遇到这样的一个问题,我们在分析一些大型电子商务平台的Web前端脚本时,想找到一个元素绑定的点击事件,并不是那么容易,因为有些前端脚本封装的比较隐蔽,甚至有些加密脚本,用传统的查找元素ID.或 ...
- Mysql抓包工具 - MySQL Sniffer 使用小结 (含带general_log日志)
在mysql运维工作中,一般会使用tcpdump做一些分析(直接读分析日志比较难以看明白,在数据库连接值高时使用):对于mysql实时的连接监控分析,通常会使用"mysqladmin/sho ...
- Notes of Daily Scrum Meeting(12.25)
今天在学姐的帮助下,我们终于把网络连接的部分连通了,这对我们是一个很大的鼓舞,也找到了前期 连不通的问题在哪里,这让我们重新有了进行下去的勇气和决心,我们会在最后这几天把前端和后端结合, 做出我们最后 ...
- hots团队项目终审报告
一.团队成员: 徐钧鸿: 1994年1月19日生人,摩羯座最后一天.所以有摩羯的强迫症和水瓶古怪的性格 暂且算队长吧…… 高中的时候因为兴趣学了竞赛,于是就入坑了,于是就来北航学计算机了 兴趣面很广, ...
- 个人项目Individual Project:n皇后问题
源码的github链接: https://github.com/luhan420/test/tree/master 1.需求分析 在本次的课程设计中,用到的知识点主要有:类.函数.选择结构里的条件语 ...
- SSM(Spring +SpringMVC + Mybatis)框架搭建
SSM(Spring +SpringMVC + Mybatis)框架的搭建 最近通过学习别人博客发表的SSM搭建Demo,尝试去搭建一个简单的SSMDemo---实现的功能是对用户增删改查的操作 参考 ...
- PAT 1011 A+B和C
https://pintia.cn/problem-sets/994805260223102976/problems/994805312417021952 给定区间[-2^31^, 2^31^]内的3 ...
- 在CentOS 7中搭建Git服务器
环境说明 - CentOS 7.x 最小安装 - 配置网络连接 1. 安装Git及创建用户 # 安装Git $ yum install git # 创建一个git用户组和用户,用来运行git服务 $ ...
- Oracle面试题(基础篇)
1. Oracle跟SQL Server 2005的区别? 宏观上: 1). 最大的区别在于平台,oracle可以运行在不同的平台上,sql server只能运行在windows平台上,由于windo ...
- NodeJS 学习记录
这里是我学习NodeJs的学习记录 URL:网址解析的好帮手 URL,URI 首先,URI是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源.而URL是u ...