[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的更多相关文章

  1. BZOJ 4385: [POI2015]Wilcze doły

    4385: [POI2015]Wilcze doły Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 648  Solved: 263[Submit][ ...

  2. BZOJ 4384: [POI2015]Trzy wieże

    4384: [POI2015]Trzy wieże Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 217  Solved: 61[Submit][St ...

  3. Bzoj 3747: [POI2015]Kinoman 线段树

    3747: [POI2015]Kinoman Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 553  Solved: 222[Submit][Stat ...

  4. BZOJ 3747 POI2015 Kinoman 段树

    标题效果:有m点,每个点都有一个权值.现在我们有这个m为点的长度n该序列,寻求区间,它仅出现一次在正确的点区间内值和最大 想了很久,甚至神标题,奔说是水的问题--我醉了 枚举左点 对于每个请求留点右键 ...

  5. [Poi2015]

    [POI2015]Łasuchy 一看以为是sb题 简单来说就是每个人获得热量要尽量多 不能找别人 首先这道题好像我自己找不到NIE的情况 很容易想到一个优化 如果一个数/2>另一个数 那么一定 ...

  6. BZOJ_4378_[POI2015]Logistyka_树状数组

    BZOJ_4378_[POI2015]Logistyka_树状数组 Description 维护一个长度为n的序列,一开始都是0,支持以下两种操作: 1.U k a 将序列中第k个数修改为a. 2.Z ...

  7. BZOJ_3747_[POI2015]Kinoman_线段树

    BZOJ_3747_[POI2015]Kinoman_线段树 Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放 ...

  8. POI2015 解题报告

    由于博主没有BZOJ权限号, 是在洛咕做的题~ 完成了13题(虽然有一半难题都是看题解的QAQ)剩下的题咕咕咕~~ Luogu3585 [POI2015]PIE Solution 模拟, 按顺序搜索, ...

  9. P3594 [POI2015]WIL-Wilcze doły

    P3594 [POI2015]WIL-Wilcze doły 题目描述 给定一个长度为n的序列,你有一次机会选中一段连续的长度不超过d的区间,将里面所有数字全部修改为0.请找到最长的一段连续区间,使得 ...

随机推荐

  1. CrackMe-005全破详解(图文+源码)--上篇

    逆向破解 | 逆向 | 逆向分析 | CrackMe | Crack | CrackMe5 | CrackMe05 前言 CrackMe005,都说比较变态,很多人给放过去了,但是我还是决定上了它,既 ...

  2. SpringBoot笔记--Jackson

    SpringUtil.getBean<GenericConversionService>().addConverter(Date2LocalDateTimeConverter()) var ...

  3. Docker inspect - format格式化输出 - 运维笔记

    Docker --format 参数提供了基于 Go模板 的日志格式化输出辅助功能,并提供了一些内置的增强函数. 什么是模板?上图是大家熟悉的 MVC 框架(Model View Controller ...

  4. python报错问题解决:'ascii' codec can't encode character

    之前部署了openstack虚拟化环境,有一天在使用nova list查看虚拟机的时候,突然报错!如下: [root@linux-node1 src]# nova listERROR (Unicode ...

  5. squid代理http和https方式上网的操作记录

    需求说明:公司IDC机房有一台服务器A,只有内网环境:192.168.1.150现在需要让这台服务器能对外访问,能正常访问http和https请求(即80端口和443端口)操作思路:在IDC机房里另找 ...

  6. ACM-ICPC 2018 徐州赛区网络预赛 G. Trace-树状数组-区间修改,单点查询

    赛后和队友讨论了一波,感谢无敌的队友给我细心的讲题 先埋坑 #include<iostream> #include<string.h> #include<algorith ...

  7. What’s for Beta

    经过和Travis与Zhongqiu讨论,我们希望我们发布的Beta版本会支持如下内容: Naïve long-term plan UI (Useable) Naïve long-term plan ...

  8. MYSQL InnoDB Cluster

    https://dev.mysql.com/doc/refman/5.7/en/group-replication.html GroupReplication的原理 https://dev.mysql ...

  9. [转载]Memory Limits for Windows and Windows Server Releases

    Memory Limits for Windows and Windows Server Releases This topic describes the memory limits for sup ...

  10. [转帖]IBM POWER系列处理器的前世今生

    IBM POWER系列处理器的前世今生 Power是Power Optimization With Enhanced RISC的缩写,是由IBM开发的一种RISC指令集架构(ISA). IBM的很多服 ...