题目

题目大意

给你个平面上的一堆点,问序列\({p_i}\)的个数。

满足\(y_{p_{i-1}}>y_{p_i}\)并且\(x_{p_i}\)在\(x_{p_i-1}\)和\(x_{p_i-2}\)之间。


正解

我不知道为什么我的树状数组打挂了……尽管不一定能AC,但是WA了……

这题的正解有很多,最为传奇的,则是彭大爷的神仙解法。

显然这是个DP,而他抛弃了按照\(y\)从大到小排序的传统做法,反而是以\(x\)从小到大排序。将\({p_i}\)倒过来做。设\(f_{i,0/1}\)表示到\(i\)这个点,上一个点在左边或者右边的方案数。

DP的时候\(i\)从左到右扫过去,然后从右到左枚举\(j\),有两种转移:

如果\(y_j<y_i\),则从\(f_{j,1}\)转移到\(f_{i,0}\)

如果\(y_j>y_i\),则从\(f_{i,0}\)转移到\(f_{j,1}\)

这样的转移为什么是对的?实际上随便画个图就能理解了。

具体来说,在第一类转移的时候,很显然之前转移到\(f_{j,1}\)的是\(j\)和\(i\)之间的状态;

在第二类转移的时候,很显然之前转移到\(f_{i,0}\)的是\(j\)和\(i\)之间的状态。

这样就保证了题目要求的性质。


代码

using namespace std;
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 7010
inline int input(){
char ch=getchar();
while (ch<'0' || '9'<ch)
ch=getchar();
int x=0;
do{
x=x*10+ch-'0';
ch=getchar();
}
while ('0'<=ch && ch<='9');
return x;
}
int n,m,mo;
struct Node{
int x,y;
} d[N];
inline bool cmpd(const Node &a,const Node &b){return a.x<b.x;}
int f[N][2];
int main(){
n=input(),mo=input();
for (int i=1;i<=n;++i)
d[i]={input(),input()};
sort(d+1,d+n+1,cmpd);
for (int i=1;i<=n;++i){
f[i][0]=f[i][1]=1;
for (int j=i-1;j>=1;--j)
if (d[j].y<d[i].y)
(f[i][0]+=f[j][1])%=mo;
else
(f[j][1]+=f[i][0])%=mo;
}
long long ans=0;
for (int i=1;i<=n;++i)
ans+=f[i][0]+f[i][1];
printf("%lld\n",((ans-n)%mo+mo)%mo);
return 0;
}

总结

这样的DP真是太鬼畜了……

彭大爷牛逼!!!

%%%

[JZOJ1901] 【2010集训队出题】光棱坦克的更多相关文章

  1. 清橙 A1210. 光棱坦克

    A1210. 光棱坦克 时间限制:1.0s   内存限制:512.0MB   总提交次数:   AC次数:   平均分:   将本题分享到:        查看未格式化的试题   提交   试题讨论 ...

  2. [清橙A1210]光棱坦克

    [清橙A1210]光棱坦克 题目大意: 平面上放置了\(n(n\le7000)\)个反射装置,光纤将从某个装置出发,在经过一处装置时发生反射,若经过的装置坐标依次为\((x_1,y_1),(x_2,y ...

  3. [JZOJ1900] 【2010集训队出题】矩阵

    题目 题目大意 题目化简一下,就变成: 构造一个\(01\)数列\(A\),使得\(D=\sum A_iA_jB_{i,j}-\sum A_iC_i\)最大. 问这个最大的\(D\)是多少. 正解 其 ...

  4. [JZOJ1904] 【2010集训队出题】拯救Protoss的故乡

    题目 题目大意 给你一个树形的网络,每条边从父亲流向儿子.根节点为原点,叶子节点流向汇点,容量为无穷大. 可以给一些边扩大容量,最多总共扩大\(m\)容量.每条边的容量有上限. 求扩大容量后最大的最大 ...

  5. [期望DP][纪中]【2010集训队出题】彩色圆环

    彩色圆环 感谢名单 十分感谢 JA_Ma 为我讲解了 \(T1\) 的 期望DP 的思想和推论. 十分感谢 SSL_LYF 为我解答了 \(T1\) 的 期望DP 的概率的大小问题. 十分感谢 SSL ...

  6. 设计模式(二) 策略模式Strategy

    策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理,我个人的理解是,具有相同行为不同的行为模式,比如走路,有人速度3m/s,有人100m/s,把他们的具体行走和对象本身 ...

  7. QualNet/EXata的发展贯穿在美军网络中心战演进的始终

    QualNet/EXata的发展贯穿在美军网络中心战演进的始终 赵玉亭 1.   QualNet/EXata的前身GloMoSim是美国防部高级计划研究局(DARPA)在1994年启动的全球移动信息系 ...

  8. 数据结构(莫队算法):国家集训队2010 小Z的袜子

    [题目描述] 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只袜子从1到 ...

  9. 【国家集训队2010】小Z的袜子[莫队算法]

    [莫队算法][国家集训队2010]小Z的袜子 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程, ...

随机推荐

  1. git提交遇到.suo文件无法提交的问题

    这个只是我个人遇到的一个问题小记 由于最近做的项目使用VS编辑器的,在用它集成创建的项目里,每次提交都会有个后缀名为.suo的文件在修改的文件列表里.这时直接进行提交会报错, 1.我将xx.suo/x ...

  2. 从零开始搭建系统1.7——FTP安装及配置

    1.安装vsftp软件包 [root@localhost usr]# yum install -y vsftpd 2.先备份vsftpd的默认配置文件 [root@localhost usr]# cd ...

  3. cmake 支持-lpthread

    set(CMAKE_BUILD_TYPE "Release") if( CMAKE_BUILD_TYPE STREQUAL "Debug" )    set(C ...

  4. fork执行一个进程

    https://coolr321.github.io/2018/10/30/%E4%B8%80%E4%B8%AAfork-%E8%B0%83%E7%94%A8%E7%9A%84%E4%BE%8B%E5 ...

  5. SOCK_SEQPACKE

    The SOCK_SEQPACKET socket type is similar to the SOCK_STREAM type, and is also connection-oriented. ...

  6. Tools: java安装指南

    参考: https://www.cnblogs.com/smyhvae/p/3788534.htmljava安装 (1)新建->变量名"JAVA_HOME",变量值" ...

  7. 关于h5打包后 wag包无法安装的问题

    如果不是逻辑错误,那么有可能是下列三种情况之一, 1 wgt打包时的appid与安装包不符 2 打包wgt文件和打包安装包文件 用的不是同一个HBuilder账户 3 安装包打包时权限配置,和wgt包 ...

  8. ACM-ICPC 训练平台 & 比赛 分析

    the file can download in https://pan.baidu.com/s/1HwoLFHGAG-boQbIn9xIhxA occ5 the article is also pu ...

  9. Ruby 环境

    Ruby 环境 本地环境设置 如果您想要设置 Ruby 编程语言的环境,请阅读本章节的内容.本章将向您讲解与环境设置有关的所有重要的主题.建议先学习下面几个主题,然后再进一步深入学习其他主题: Lin ...

  10. 移动端图片轮播效果:depth模式总结

    最近公司app改版首页增加了一处轮播图效果,但是跟普通的轮播效果不同,是类似于下图的样式,找了一些兼容移动端的插件以及jQuery源码,总结一下使用心得: 1:jquery源码:缺点是在手机端的滑动很 ...