A1210. 光棱坦克
时间限制:1.0s   内存限制:512.0MB  
总提交次数:   AC次数:   平均分:

将本题分享到:
查看未格式化的试题   提交   试题讨论

试题来源
2010中国国家集训队命题答辩

问题描述
一个平面直角坐标系上,有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取模。
输入格式
第1行是两个由空格隔开的整数:N和Q。
  第2行到第N+1行,每行有两个整数。其中的第i行的两个整数分别是x[i]和y[i]。
输出格式
输出文件只有一行,包含一个整数,表示序列{p[i]}的数目对Q取模的结果。
样例输入
4 100
2 2
3 1
1 4
4 3
样例输出
14
样例说明
一共4个点,位置如下:

  如果M=4, 那么只有1种序列符合要求,如下图所示:


  如果M = 3,那么有3种序列符合要求,如下图:


  如果M = 2,那么有6种序列符合要求,如下图:

  如果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]。
/*首先把点按照x坐标排序(不是y坐标)设dp[i][j][0/1]代表只考虑前i个点,以第j个点为起点,下一个点在它的左边/右边的方案数.当i增加1时,从右到左 对每个之前的点考虑第i个点造成的贡献. 当这个点在第i个点以上时,第i个点可以更新这个点的dp值;当这个点在第i个点以下时,这个点可以更新第i个点的dp值.显然是可以滚动数组的.复杂度O(n*n)
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct node{int x,y;bool operator < (const node o)const{return x<o.x;}
}pot[7010];
int n,md,dp[7010][2];
int main(){scanf("%d%d",&n,&md);for(int i=1;i<=n;i++)scanf("%d%d",&pot[i].x,&pot[i].y);sort(pot+1,pot+n+1);for(int i=1;i<=n;i++){dp[i][0]=dp[i][1]=1;for(int j=i-1;j>=1;j--){if(pot[j].y<pot[i].y){dp[i][0]+=dp[j][1];if(dp[i][0]>=md)dp[i][0]-=md;}else{dp[j][1]+=dp[i][0];if(dp[j][1]>=md)dp[j][1]-=md;}}}int ans=0;for(int i=1;i<=n;i++){ans+=dp[i][0];if(ans>=md)ans-=md;ans+=dp[i][1];if(ans>=md)ans-=md;}ans-=n;if(ans<0)ans+=md;printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/thmyl/p/8185750.html

清橙 A1210. 光棱坦克相关推荐

  1. 清橙A1210. 光棱坦克

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

  2. [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[ ...

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

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

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

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

  5. jzoj1901. 光棱坦克

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

  6. 光储充一体化充电站_【储能项目】深圳宝清240kW/500kWh光储充电站项目

    1. 项目名称:深圳宝清240kW/500kWh光储充电站项目 2. 项目规模:240kW/500kWh 3. 项目地区:中国广东省深圳市龙岗区宝清储能站 4. 项目阶段:截止2020年6月,该项目已 ...

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

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

  8. 清橙OJ A1095 回溯之教室排课

    题目地址:http://www.tsinsen.com/ViewGProblem.page?gpid=A1095 //清橙OJ A1095 回溯之教室排课 //http://www.tsinsen.c ...

  9. [bzoj 2038 OR 清橙A1206 小Z的袜子]莫队算法

    [bzoj 2038 OR 清橙A1206 小Z的袜子]莫队算法 题意描述:[清橙A1206 时限:1s] [bzoj 2038 时限:20s] 题意描述: 作为一个生活散漫的人,小Z每天早上都要耗费 ...

最新文章

  1. 12.文件系统——磁盘管理之RAID概述
  2. 笔试训练1 知识点整理
  3. Unity3D_07_日志、文本打印
  4. VB用API实现各种对话框(总结)(转载)
  5. 广技师17专插本c语言答案,广东技术师范学院2017年专插本C语言程序设计(1)
  6. Python学习笔记之变量
  7. Android-ViewPagerIndicator
  8. 沙绿色background-color:#e5eecc; border:solid 1px #c3c3c3;
  9. ai驱动数据安全治理_利用AI驱动的自动协调器实时停止有毒信息
  10. Unity3D脚本概述
  11. 微软补丁导致填制凭证右侧滚动条消失
  12. 测试理论基础篇~有它一篇就够了!
  13. 数据分析基础——基本运算
  14. 二手苹果8多少钱_苹果期货一手多少钱
  15. 基于深度学习的红外和可见光图像融合论文及代码整理
  16. 【Linux】解决安装Anaconda后默认进入base环境的问题
  17. 计算list的字节数/mb数
  18. 人生最曼妙的风景,竟是内心的淡定与从容——杨绛
  19. 417. 太平洋大西洋水流问题(DFS)
  20. linux 修改mysql默认端口3306

热门文章

  1. JS实现华为账号授权服务,一键登录!
  2. proteus教程——cc4021串行输入
  3. Word97文字处理软件培训教案
  4. web自动化三大浏览器驱动包之谷歌,火狐,IE
  5. linux主机名(静态主机名、临时主机名)
  6. linux proc目录全称,Linux命令 今天说一说Linux 命令缩写全称
  7. BBC分析了365个职业,发现最不可能被机器淘汰的居然是……
  8. Java实现导出内容为PDF格式
  9. 三个数相减的平方公式_小学一年级数学难点解析,附34个必考公式,孩子必备!...
  10. c语言试卷分析报告范文,c语言试卷分析