清橙 A1210. 光棱坦克
求满足以下两个条件的点列{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取模。
第2行到第N+1行,每行有两个整数。其中的第i行的两个整数分别是x[i]和y[i]。
2 2
3 1
1 4
4 3
如果M=4, 那么只有1种序列符合要求,如下图所示:
如果M = 3,那么有3种序列符合要求,如下图:
如果M = 2,那么有6种序列符合要求,如下图:
如果M = 1,也就是点列只包含一个点的情况。那么有4种序列。明显都符合要求。
所以一共就有1 + 3 + 6 + 4一共14种序列符合要求。
对于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[];
int n,md,dp[][];
int main(){
scanf("%d%d",&n,&md);
for(int i=;i<=n;i++)scanf("%d%d",&pot[i].x,&pot[i].y);
sort(pot+,pot+n+);
for(int i=;i<=n;i++){
dp[i][]=dp[i][]=;
for(int j=i-;j>=;j--){
if(pot[j].y<pot[i].y){
dp[i][]+=dp[j][];
if(dp[i][]>=md)dp[i][]-=md;
}
else{
dp[j][]+=dp[i][];
if(dp[j][]>=md)dp[j][]-=md;
}
}
}
int ans=;
for(int i=;i<=n;i++){
ans+=dp[i][];
if(ans>=md)ans-=md;
ans+=dp[i][];
if(ans>=md)ans-=md;
}
ans-=n;
if(ans<)ans+=md;
printf("%d\n",ans);
return ;
}
清橙 A1210. 光棱坦克的更多相关文章
- [清橙A1210]光棱坦克
[清橙A1210]光棱坦克 题目大意: 平面上放置了\(n(n\le7000)\)个反射装置,光纤将从某个装置出发,在经过一处装置时发生反射,若经过的装置坐标依次为\((x_1,y_1),(x_2,y ...
- [JZOJ1901] 【2010集训队出题】光棱坦克
题目 题目大意 给你个平面上的一堆点,问序列\({p_i}\)的个数. 满足\(y_{p_{i-1}}>y_{p_i}\)并且\(x_{p_i}\)在\(x_{p_i-1}\)和\(x_{p_i ...
- 清橙A1212:剪枝
题面 清橙 Sol 一种新的树上\(DP\)姿势 从左往右按链\(DP\) 做法: 维护两个栈\(S1\),\(S2\) \(S1\)存当前的链 \(S2\)存分叉点以下要改的链 \(Dfs\),弄一 ...
- 清橙A1202&Bzoj2201:彩色圆环
因为Bzoj是权限题,所以可以去清橙做一下 Sol 突然考了一道这样的题,考场上强行\(yy\)出来了 win下评测Long double爆零TAT 首先肯定是破环为链变成序列问题辣 那么就要求第一个 ...
- 清橙A1206.小Z的袜子 && CF 86D(莫队两题)
清橙A1206.小Z的袜子 && CF 86D(莫队两题) 在网上看了一些别人写的关于莫队算法的介绍,我认为,莫队与其说是一种算法,不如说是一种思想,他通过先分块再排序来优化离线查询问 ...
- 洛谷 P1903 BZOJ 2120 清橙 A1274【模板】分块/带修改莫队(数颜色)(周奕超)
试题来源 2011中国国家集训队命题答辩 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔 ...
- 清橙 A1206 小Z的袜子(莫队算法)
A1206. 小Z的袜子 时间限制:1.0s 内存限制:512.0MB 总提交次数:1357 AC次数:406 平均分:46.75 将本题分享到: 查看未格式化的试题 ...
- 清橙A1363. 水位 - 清华大学2012年信息学优秀高中学子夏令营
问题描述 有一个正方形的地区,该地区特点鲜明:如果把它等分为N×N个小正方形格子的话,在每个格子内的任意地点的地表高度是相同的,并且是一个0到M之间的整数.正方形地区的外部被无限高的边界包围. 该地区 ...
- 清橙 A1120 拦截导弹 -- 动态规划(最长上升子序列)
题目地址:http://oj.tsinsen.com/A1120 问题描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但 ...
随机推荐
- 分享知识-快乐自己:slor 服务的搭建
Slor 服务的搭建: 1):上传 solr tar包到指定目录 2):解压到 指定目录下 [root@admin tools]# tar -zxvf solr-4.10.3.tgz.tgz -C ...
- http接口测试框架-构想图
写这篇,是当初如何学习,如何写,如何实现,总体的流程
- codeforces 655A A. Amity Assessment(水题)
题目链接: A. Amity Assessment time limit per test 2 seconds memory limit per test 256 megabytes input st ...
- mongodb与mysql的命令对比
mongodb与mysql命令对比 传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由数据库(database).集合(col ...
- bzoj1006神奇的国度
OrzCDQ您太强辣 #include<iostream> #include<cstdio> #include<cstdlib> #include<algor ...
- cmd cvf war包
1.进入要打包的目录下 --> cmd d: cd \路径 jar -cvf 包名.war * 2.解压 进入需要解压的目录 cd /depa123/webapps/css jar -xvf / ...
- GCC生成动态库
main.c #include <stdio.h> void hello(void); int main(int argc, char ** argv) { printf("Th ...
- IronPython for ASP.NET 部署注意事项
用 IronPython for ASP.NET 开发的网站,在部署时,除了发布 bin 目录下的 IronPython.dll, IronMath.dll, Microsoft.Web.IronPy ...
- FIS 雪碧图sprite合并
1 安装fis(必须先安装node和npm):npm install -g fis3 2 构建项目发布到根目录下的output:fis3 release -d ./output 项目根目录:FIS3 ...
- Erlang generic standard behaviours -- gen_server system msg
这是Erlang generic standard behaviors gen_server 分析的系列的最后一篇,主要分析gen_server module 辅助性的功能函数. 在gen_serve ...