题目描述

Description
  一个平面直角坐标系上,有N个点,标号为1到N,其中第i个点的坐标为(x[i], y[i])。   求满足以下两个条件的点列{p[i]}的数目(假设{p[i]}的长度为M):   1) 对任意1 <= i < j <= M,必有y[p[i]] > y[p[j]];   2) 对任意3 <= i <= M,必有x[p[i-1]] < x[p[i]] < x[p[i-2]]或者x[p[i-2]] < x[p[i]] < x[p[i-1]]。   求满足条件的非空序列{p[i]}的数目,结果对一个整数Q取模。

Input
  第1行是两个由空格隔开的整数:N和Q。   第2行到第N+1行,每行有两个整数。其中的第i行的两个整数分别是x[i]和y[i]。

Output
  输出文件只有一行,包含一个整数,表示序列{p[i]}的数目对Q取模的结果。

Sample Input
4 100
2 2
3 1
1 4
4 3

Sample Output
14

Data Constraint

Hint

如果M = 1,也就是点列只包含一个点的情况。那么有4种序列。明显都符合要求。 所以一共就有1 + 3 + 6 + 4一共14种序列符合要求。 【数据范围】   对于25%的数据,N <= 50;对于40%的数据,N <= 700;对于60%的数据,N <= 2000;对于70%的数据,N <= 4000;对于100%的数据,1 <= N <= 7000。   对于100%的数据,有1 <= Q <= 1000000000。   对于50%的数据,保证对任何的i,x[i]和y[i]是1到N之间的整数;对于100%的数据,保证对任何的i,x[i]和y[i]都是1到2000000000之间的整数。   对于100%的数据,保证有当i != j时,有x[i] != x[j]且y[i] != y[j]。

70%

设f[i][j]表示当前选的点为i,y坐标为j
显然可以按x从小到大排序+离散化y,转移可以递推,从f[i][j]推到f[i][y[i]](j≠y[i])
如果推到某个位置,且该位置的i’>i,那么可以转移到f[i’][j]
这样做时间是O(n2),但是常数较大(n=7000时跑了3s)

100%

考虑一种比较玄♂学的dp
把点按x从小到大排序,设f[i]表示找到的序列右端点为i,下一个要往左找的方案数,g[i]反之
则对于每个i,从大到小枚举j,若y[j]<y[i],则f[i]+=g[j],否则g[j]+=f[i]
正确性可以画图,发现每次转移的实质是从y小的转移到大的,所以还是满足无后效性
注意当长度为1时被算了两次
时间还是O(n2),但是常数很小

code

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#define fo(a,b,c) for (a=b; a<=c; a++)
#define fd(a,b,c) for (a=b; a>=c; a--)
#define add(a,b) a=((a)+(b))%mod
using namespace std;struct type{int x,y;
} a[7001];
int f[7001];
int g[7001];
int b[7001];
int n,mod,i,j,k,l,ans;bool cmp(type a,type b)
{return a.x<b.x;
}int main()
{//  freopen("tank14.in","r",stdin);
//  freopen("S8_13_2.in","r",stdin);scanf("%d%d",&n,&mod);fo(i,1,n)scanf("%d%d",&a[i].x,&a[i].y);sort(a+1,a+n+1,cmp);fo(i,1,n){f[i]=1;fd(j,i-1,1)if (a[i].y>a[j].y)add(f[i],g[j]);elseadd(g[j],f[i]);g[i]=1;}fo(i,1,n){add(ans,f[i]);add(ans,g[i]);}ans-=n;if (ans<0)ans+=mod;printf("%d\n",ans);
}

jzoj1901. 光棱坦克相关推荐

  1. 清橙 A1210. 光棱坦克

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

  2. [JZOJ1901] 【2010集训队出题】光棱坦克

    题目 题目大意 给你个平面上的一堆点,问序列pi{p_i}pi​的个数. 满足ypi−1>ypiy_{p_{i-1}}>y_{p_i}ypi−1​​>ypi​​并且xpix_{p_i ...

  3. 清橙A1210. 光棱坦克

    问题描述 一个平面直角坐标系上,有N个点,标号为1到N,其中第i个点的坐标为(x[i], y[i]). 求满足以下两个条件的点列{p[i]}的数目(假设{p[i]}的长度为M): 1) 对任意1 &l ...

  4. [Tsinsen A1210] 光棱坦克(动态规划+前缀和优化)

    题意 一个平面直角坐标系上,有 N N N个点,标号为 1 1 1到 N N N,其中第 i i i个点的坐标为 ( x [ i ] , y [ i ] ) (x[i], y[i]) (x[i],y[ ...

  5. [tsinsen1210]光棱坦克——动态规划+前缀和优化

    题目大意: 一个平面直角坐标系上,有N个点,标号为1到N,其中第i个点的坐标为(x[i], y[i]). 求满足以下两个条件的点列{p[i]}的数目(假设{p[i]}的长度为M): 1) 对任意1 & ...

  6. argb可以和rgb同步吗_神光同步酷炫幻彩,安钛克光棱120 RGB风扇套装

    目前这个时代,电脑的各种配件来说,走向了万物皆要有光的风格.相信发光耳机,发光键盘,发光鼠标大家也都见过不少.侧透机箱甚至全透机箱搭配各类酷炫光效在电竞游戏领域也变得越来越火.许多小伙伴在组装一款电脑 ...

  7. 迈向高手殿堂——红警2坦克战全攻略

    迈向高手殿堂--红警坦克战全攻略 引言 在全文开始前,先提一个问题: 红警2中,两家火拚坦克,A家有20辆坦克,B家有18辆坦克+5条狗+6个动员兵,双方控制都没有失误,请问谁的胜算大? 我想有一定水 ...

  8. 红警2共和国之辉如何打7冷酷

    共和国之辉有中国,好打一些. 因为中国实在变态. 黑鹰.天启.解放军.超级武器 都非常强. 能否打7个冷酷影响因素很多: 1.资源高低. 极高最容易,资源越低难度越高. 2.地理位置. 角落好一点,中 ...

  9. 红警ol服务器维护中1003,不止于经典,全球唯一正版授权《红警OL》登录UP2018腾讯新文创生态大会...

    4月23日,UP2018腾讯新文创生态大会在北京国家会议中心举行.由全球唯一正版红警IP授权.经典PC游戏"红色警戒"为基础开发的现代战争策略类手游<红警OL>华丽登场 ...

最新文章

  1. 计算机组成原理实验报告西华大学,计算机组成原理实验报告算术逻辑运算单元实验...
  2. Java MySql 连接数据库
  3. 范式化设计和反范式化设计优缺点
  4. Red Hat Enterprise MRG 2.0 Installation And Configuration Guide
  5. 浅谈Javascript中的函数重载实现
  6. 数据结构:二叉查找树(C语言实现)
  7. centos mysql 5.5.57_centos 6.5装mysql5.7
  8. Golang sync.Pool 简介与用法
  9. SpringBoot自动配置原理分析
  10. JavaScript黑魔法:不可阻止的“自动下载”
  11. 网页中超长图片转成pdf文档
  12. hivesql uv
  13. Edit Control响应全选(Ctrl+A)
  14. 计算机专业考研复习要点,2017年最新考研各科目复习要点
  15. 何为ISM频段?ISM频段主要频率有哪些?
  16. a标签href的几种写法
  17. linux怎么看系统内存多大内存频率,Linux 查看 CPU 型号及内存频率及其它信息的命令...
  18. 微信识别图片文字直接导出Word方法
  19. Ceph RBD 入门系列(一) : 块设备的基本使用及librbd在各个应用场景的位置
  20. PF_INET 和 AF_INET的区别

热门文章

  1. 走进Prime Time系列 - 走进PT - 01
  2. 无法将类型为“Autodesk.Revit.DB.ElementId”的对象强制转换为类型“System.IConvertible
  3. 第一本 ECharts 数据可视化书籍出版了!
  4. 更新表达式updateExpression
  5. python maierge_讲解:Ubungsblatt、C++、Programmieren、C++Python|Java
  6. Android用户界面设计
  7. 【CF833B】The Bakery
  8. Learn Git Branching Note
  9. 「Branching Model」- 分支模型 @20210329
  10. 深度学习入门笔记-----杨立AI