[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. 【react】使用 create-react-app 构建基于TypeScript的React前端架构----上

    写在前面 一直在探寻,那优雅的美:一直在探寻,那精湛的技巧:一直在探寻,那简单又直白,优雅而美丽的代码. ------ 但是在JavaScript的动态类型.有时尴尬的自动类型转换,以及 “0 == ...

  2. 2018年高教社杯全国大学生数学建模竞赛B题解题思路

    题目 先贴下B题的题目吧 问题B    智能RGV的动态调度策略 图1是一个智能加工系统的示意图,由8台计算机数控机床(Computer Number Controller,CNC).1辆轨道式自动引 ...

  3. vs2017安装

    每次安装包都搞的很大,而且出各式各式的问题. 安装程序清单签名失败 运行'vs_Enterprise.exe'时,出现'安装程序清单签名失败'的错误,直接删除'vs_installer.opc'文件, ...

  4. 【个人阅读】软件工程M1/M2阶段总结

    这次作业是好久以前布置的,由于学期末课程设计任务比较重,我在完善M2阶段的代码的同时又忙于数据库的实现和编译器的实现,一度感觉忙得透不过气来....到这些都基本完成的时候,会看自己以前的阅读心得,觉得 ...

  5. beta阶段性能指标测试

    性能指标概况 安装耗时 启动耗时 CPU占用 内存占用 电池温度 网络流量 平均值 5.48s 1.04s 1.61% 18.68MB 32.44℃ 93.78B 峰值 131.74s 5.13s 5 ...

  6. 嵌入式linux教程

    串口通信minicom $ sudo apt-get install minicom ///安装 # minicom –s //运行 //CTRL+A Z 弹出菜单       2.NFS网络文件配置 ...

  7. 小学四则运算APP 第二次冲刺 第四天

    团队成员:陈淑筠.杨家安.陈曦 团队选题:小学四则运算APP 第二次冲刺阶段时间:11.29~12.09 本次发布的是合并后的选择题功能界面的设置: ChoiceSet.java: package c ...

  8. 使用Java+Kotlin双语言的LeetCode刷题之路(三)

    BasedLeetCode LeetCode learning records based on Java,Kotlin,Python...Github 地址 序号对应 LeetCode 中题目序号 ...

  9. ubuntu在windows下的wubi安装

    转自:http://mp.weixin.qq.com/s?__biz=MjM5NjYxNjU0OQ==&mid=200664819&idx=2&sn=25719890570b1 ...

  10. Java的JDK下Hashtable与HashMap的区别

    时间角度: Hashtable * @since JDK1.0 ; HashMap* @since   1.2 基类与接口角度: public class Hashtable<K,V> e ...