雅礼集训 Day1 T2 折射
折射
题目描述
小\(\mathrm{Y}\)十分喜爱光学相关的问题,一天他正在研究折射.
他在平面上放置了\(n\)个折射装置,希望利用这些装置画出美丽的折线.
折线将从某个装置出发,并且在经过一处装置时可以转向,若经过的装置坐标依次为\((x_1, y_1),(x_2,y_2),\dots (x_k, y_k)\), 则必须满足:
- \(\forall j\in (1,k],y_j<y_{j-1}\)
- \(\forall j\in (2,k],x_{j-2}<x_j<x_{j-1}\ \mathrm{or}\ x_{j-1}<x_j<x_{j-2}\)
现在他希望你能告诉他,一共有多少种不同的光线能被他画出来,两种光线不同当且仅当经过的折射装置的集合不同.你只需要告诉他答案对\(10^9+7\)取模后的结果.
输入输出格式
输入格式
第一行一个正整数\(n\),表示折射装置的数量.
接下来\(n\)行,每行两个整数\(x_i,y_i\)表示折射装置的坐标.
输出格式
输出一行一个整数,表示答案对\(10^9+7\)取模后的结果.
说明
对于\(10\%\)的数据:\(n\le 700,1\le x_i,y_i\le n\)
对于\(20\%\)的数据:\(n\le 1000,1\le x_i, y_i\le n\)
对于\(50\%\)的数据:\(n\le 4000,|x_i|,|y_i|\le 10^9\)
对于\(100\%\)的数据:\(n\le 6000,|x_i|,|y_i|\le 10^9\)
所有数据满足\(\forall i\not=j,x_i\not=x_j\ \mathrm{and}\ y_i\not=y_j\).
最后五分钟发现题目看错了emm,爆0嘞
后来发现STD的做法简直玄妙至极
有很多空间\(O(n^2)\),时间\(O(n^2)\)的50pts做法,不多提了
正解\(dp_{i,0/1}\)代表按\(x\)排序以\(i\)为入射点的光线,像左下方0/右下方1入射,注意这里前\(i\)并不是状态,因为后面可以更改这个\(dp_i\)状态,按\(x\)排序只是为了方便处理
转移呢?
\(\forall y_j<y_i,dp_{i,0} \leftarrow \ dp_{j,1}\)
\(\forall y_j>y_i,dp_{j,1} \leftarrow \ dp_{k,0}|y_k<y_i \ and \ x_k>x_j\)
这里直接借用题解里面说的了
写法也很妙
总结:对于给了一些单调限制条件的\(dp\),不妨根据限制条件设计方程
Code:
#include <cstdio>
#include <algorithm>
const int N=6010;
const int mod=1e9+7;
struct node
{
int x,y;
bool friend operator <(node n1,node n2){return n1.x<n2.x;}
}dx[N];
int n,dp[N][2],ans;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d%d",&dx[i].x,&dx[i].y);
std::sort(dx+1,dx+1+n);
dp[1][0]=dp[1][1]=1;
for(int i=2;i<=n;i++)
{
dp[i][0]=dp[i][1]=1;
for(int j=i-1;j;j--)
if(dx[j].y>dx[i].y)
(dp[j][1]+=dp[i][0])%=mod;
else
(dp[i][0]+=dp[j][1])%=mod;
}
for(int i=1;i<=n;i++) (ans+=dp[i][0])%=mod,(ans+=dp[i][1]-1)%=mod;
printf("%d\n",ans);
return 0;
}
2018.10.1
雅礼集训 Day1 T2 折射的更多相关文章
- 雅礼集训 Day1 T1 养花
养花 题目描述 小\(C\)在家种了\(n\)盆花,每盆花有一个艳丽度\(a_i\). 在接下来的\(m\)天中,每天早晨他会从一段编号连续的花中选择一盆摆放在客厅, 并在晚上放回. 同时每天有特定的 ...
- 【2017-10-1】雅礼集训day1
今天的题是ysy的,ysy好呆萌啊. A: 就是把一个点的两个坐标看成差分一样的东西,以此作为区间端点,然后如果点有边->区间没有交. B: cf原题啊.....均摊分析,简单的那种. 线段树随 ...
- 雅礼集训 Day1 T3 画作 解题报告
画作 题目描述 小\(\mathrm{G}\)的喜欢作画,尤其喜欢仅使用黑白两色作画. 画作可以抽象成一个\(r\times c\)大小的\(01\)矩阵.现在小\(\mathrm{G}\)构思好了他 ...
- 雅礼集训 Day6 T2 Equation 解题报告
Equation 题目描述 有一棵\(n\)个点的以\(1\)为根的树,以及\(n\)个整数变量\(x_i\).树上\(i\)的父亲是\(f_i\),每条边\((i,f_i)\)有一个权值\(w_i\ ...
- 雅礼集训 Day3 T2 u 解题报告
u 题目背景 \(\frac 14\) 遇到了一道水题,完全不会做,于是去请教小\(\text{D}\).小\(\text{D}\)看了一眼就切掉了这题,嘲讽了\(\frac 14\)一番就离开了. ...
- 雅礼集训 Day3 T2 v 解题报告
v 题目背景 \(\frac 14\)遇到了一道水题,又完全不会做,于是去请教小\(\text{D}\).小\(\text{D}\)看了\(0.607\)眼就切掉了这题,嘲讽了\(\frac 14\) ...
- 「雅礼集训 2017 Day1」 解题报告
「雅礼集训 2017 Day1」市场 挺神仙的一题.涉及区间加.区间除.区间最小值和区间和.虽然标算就是暴力,但是复杂度是有保证的. 我们知道如果线段树上的一个结点,\(max=min\) 或者 \( ...
- [LOJ 6031]「雅礼集训 2017 Day1」字符串
[LOJ 6031] 「雅礼集训 2017 Day1」字符串 题意 给定一个长度为 \(n\) 的字符串 \(s\), \(m\) 对 \((l_i,r_i)\), 回答 \(q\) 个询问. 每个询 ...
- [LOJ 6030]「雅礼集训 2017 Day1」矩阵
[LOJ 6030] 「雅礼集训 2017 Day1」矩阵 题意 给定一个 \(n\times n\) 的 01 矩阵, 每次操作可以将一行转置后赋值给某一列, 问最少几次操作能让矩阵全为 1. 无解 ...
随机推荐
- IO流的应用_Copy文件
IO流的应用_Copy文件 (1) import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundEx ...
- 基本数据类型补充,set集合,深浅拷贝等
1.join:将字符串,列表,用指定的字符连接,也可以用空去连接,这样就可以把列表变成str ll = ["wang","jian","wei&quo ...
- mysql 自定义不规则排序
mysql按id的指定顺序进行排序,以前解决过一次,后来忘了,记录一下 SELECT * FROM `table` WHERE id<6 order by field(id,3,5,1,2,4)
- ubuntu中使用apt命令安装ipython失败解决方案
在最近使用ubuntu安装ipython时,出现如下报错: 出现这个问题,主要是因为apt还在运行,故解决方案为: 1.找到并且杀掉所有的apt-get 和apt进程 运行下面的命令来生成所有含有 a ...
- 最短路径之迪杰斯特拉算法(Java)
1)Dijkstra算法适用于求图中两节点之间最短路径 2)Dijkstra算法设计比较巧妙的是:在求源节点到终结点自底向上的过程中,源节点到某一节点之间最短路径的确定上(这也是我之前苦于没有解决的地 ...
- C语言真正的编译过程(4个步骤~~预编译,编译,汇编,连接)
转载自:https://www.cnblogs.com/wuyouxiaocai/p/5701088.html#commentform 说实话,很多人做了很久的C/C++,也用了很多IDE,但是对于可 ...
- POJ 1854 贪心(分治)
Evil Straw Warts Live Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 1144 Accepted: ...
- 匿名函数lambda python
lambda 的主体是一个表达式,不是一个代码块lambda 只有一行,仅仅能在lambda表达式种封装有限的逻辑进去匿名函数:需要一个函数,而又不想动脑筋去想名字 #普通函数的定义 def f(a, ...
- Javascript Step by Step - 04
前言 本篇主要讨论jQuery的常用的若干操作.为了能直观的显示操作的结果,首先建立一个html文件,内容如下: <!DOCTYPE html> <html> <head ...
- dex2oat 加载多次
我是一个做插件开发的人员,插件就是动态加载dex文件. 然后4.4以后,Android dalvik虚拟机,和ART. art运行的必须要把dex转换为oat elf文件. 然后,这个dex2oat需 ...