雅礼集训 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. 无解 ...
随机推荐
- Redis高可用
redis高可用只要在于三个方面 主从复制 哨兵机制 集群机制 主从复制 主从复制作用: 1.数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式.2.故障恢复:当主节点出现问题时,可 ...
- C#基础-委托与事件
委托 delegate是申明委托的关键字 返回类型都是相同的,并且参数类型个数都相同 委托声明 delegate double DelOperater(double num1, double num2 ...
- git 代码托管使用方法
Git代码托管 1 准备材料 在coding,github这些代码托管网站上申请一个账户. Linux平台什么需要一个git,如ubuntu 需要 $ sudo apt-get install git ...
- POJ:2395-Out of Hay
Out of Hay Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18780 Accepted: 7414 Descripti ...
- Maven系列之快速入门
文章结构 唯快不破---Maven快速入门 稳打稳扎---Maven核心知识 实用为先---Maven如何建立Web项目 1 唯快不破---Maven快速入门 1.1 Maven项目 ...
- 9,Linux下的python3,virtualenv,Mysql、nginx、redis安装配置
常用服务安装部署 学了前面的Linux基础,想必童鞋们是不是更感兴趣了?接下来就学习常用服务部署吧! 安装环境: centos7 + vmware + xshell MYSQL(mariadb) ...
- https refused 解决方法
今天调试Android程序,所有的手机都ok,后来,我一个手机一直说,refused. 其实这就说明代码是没有问题的,你应该可以根据这个把代码的原因排除.然后剩下的,网络请求还能有什么,网路白. 果然 ...
- .NET非常棒的开源项目,给你意想不到的东西!
http://www.cnblogs.com/Leo_wl/p/4560146.html
- loadrunner检查点设置失败,日志中SaveCount无法被正常统计出来
在脚本正确的情况下的web_reg_find检查点检查失败,SaveCount无法被正常统计出来. 在检查项Text为中文的情况下, ******(我是被录制下来的代码) web_reg_find(& ...
- Springboot 启动问题
每次以debug方式启动springboot之后都会在SilentExitExceptionHandler类中的throw new SilentExitException() 解决办法 :window ...