折射

题目描述

小\(\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 折射的更多相关文章

  1. 雅礼集训 Day1 T1 养花

    养花 题目描述 小\(C\)在家种了\(n\)盆花,每盆花有一个艳丽度\(a_i\). 在接下来的\(m\)天中,每天早晨他会从一段编号连续的花中选择一盆摆放在客厅, 并在晚上放回. 同时每天有特定的 ...

  2. 【2017-10-1】雅礼集训day1

    今天的题是ysy的,ysy好呆萌啊. A: 就是把一个点的两个坐标看成差分一样的东西,以此作为区间端点,然后如果点有边->区间没有交. B: cf原题啊.....均摊分析,简单的那种. 线段树随 ...

  3. 雅礼集训 Day1 T3 画作 解题报告

    画作 题目描述 小\(\mathrm{G}\)的喜欢作画,尤其喜欢仅使用黑白两色作画. 画作可以抽象成一个\(r\times c\)大小的\(01\)矩阵.现在小\(\mathrm{G}\)构思好了他 ...

  4. 雅礼集训 Day6 T2 Equation 解题报告

    Equation 题目描述 有一棵\(n\)个点的以\(1\)为根的树,以及\(n\)个整数变量\(x_i\).树上\(i\)的父亲是\(f_i\),每条边\((i,f_i)\)有一个权值\(w_i\ ...

  5. 雅礼集训 Day3 T2 u 解题报告

    u 题目背景 \(\frac 14\) 遇到了一道水题,完全不会做,于是去请教小\(\text{D}\).小\(\text{D}\)看了一眼就切掉了这题,嘲讽了\(\frac 14\)一番就离开了. ...

  6. 雅礼集训 Day3 T2 v 解题报告

    v 题目背景 \(\frac 14\)遇到了一道水题,又完全不会做,于是去请教小\(\text{D}\).小\(\text{D}\)看了\(0.607\)眼就切掉了这题,嘲讽了\(\frac 14\) ...

  7. 「雅礼集训 2017 Day1」 解题报告

    「雅礼集训 2017 Day1」市场 挺神仙的一题.涉及区间加.区间除.区间最小值和区间和.虽然标算就是暴力,但是复杂度是有保证的. 我们知道如果线段树上的一个结点,\(max=min\) 或者 \( ...

  8. [LOJ 6031]「雅礼集训 2017 Day1」字符串

    [LOJ 6031] 「雅礼集训 2017 Day1」字符串 题意 给定一个长度为 \(n\) 的字符串 \(s\), \(m\) 对 \((l_i,r_i)\), 回答 \(q\) 个询问. 每个询 ...

  9. [LOJ 6030]「雅礼集训 2017 Day1」矩阵

    [LOJ 6030] 「雅礼集训 2017 Day1」矩阵 题意 给定一个 \(n\times n\) 的 01 矩阵, 每次操作可以将一行转置后赋值给某一列, 问最少几次操作能让矩阵全为 1. 无解 ...

随机推荐

  1. Redis高可用

    redis高可用只要在于三个方面 主从复制 哨兵机制 集群机制 主从复制 主从复制作用: 1.数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式.2.故障恢复:当主节点出现问题时,可 ...

  2. C#基础-委托与事件

    委托 delegate是申明委托的关键字 返回类型都是相同的,并且参数类型个数都相同 委托声明 delegate double DelOperater(double num1, double num2 ...

  3. git 代码托管使用方法

    Git代码托管 1 准备材料 在coding,github这些代码托管网站上申请一个账户. Linux平台什么需要一个git,如ubuntu 需要 $ sudo apt-get install git ...

  4. POJ:2395-Out of Hay

    Out of Hay Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18780 Accepted: 7414 Descripti ...

  5. Maven系列之快速入门

    文章结构 唯快不破---Maven快速入门 稳打稳扎---Maven核心知识 实用为先---Maven如何建立Web项目  1   唯快不破---Maven快速入门       1.1 Maven项目 ...

  6. 9,Linux下的python3,virtualenv,Mysql、nginx、redis安装配置

    常用服务安装部署   学了前面的Linux基础,想必童鞋们是不是更感兴趣了?接下来就学习常用服务部署吧! 安装环境: centos7 + vmware + xshell MYSQL(mariadb) ...

  7. https refused 解决方法

    今天调试Android程序,所有的手机都ok,后来,我一个手机一直说,refused. 其实这就说明代码是没有问题的,你应该可以根据这个把代码的原因排除.然后剩下的,网络请求还能有什么,网路白. 果然 ...

  8. .NET非常棒的开源项目,给你意想不到的东西!

    http://www.cnblogs.com/Leo_wl/p/4560146.html

  9. loadrunner检查点设置失败,日志中SaveCount无法被正常统计出来

    在脚本正确的情况下的web_reg_find检查点检查失败,SaveCount无法被正常统计出来. 在检查项Text为中文的情况下, ******(我是被录制下来的代码) web_reg_find(& ...

  10. Springboot 启动问题

    每次以debug方式启动springboot之后都会在SilentExitExceptionHandler类中的throw new SilentExitException() 解决办法 :window ...