acwing 智商药
题目链接:5046. 智商药 - AcWing题库
首先考虑dfs
不用想肯定超时 过了10/17个测试点
代码
1 #include<bits/stdc++.h>
2
3 using namespace std;
4 typedef pair<int,int> PII;
5 typedef long long ll;
6 const int N=1e5+10,M=2*N;
7 const int p=1e9+7;
8 ll n,m;
9 struct node
10 {
11 int l, r;
12
13 }med[N];
14 bool st[N];
15 ll res=0;
16 void dfs(ll u)
17 {
18 if(u>n) return ;
19 //cout<<u<<endl;
20 if(u==n)
21 {
22 res++;
23 return ;
24 }
25 for(int i=1;i<=m;i++)
26 {
27 if(!st[i]&&med[i].l<=u&&u<=med[i].r-1)
28 {
29 st[i]=true;
30 dfs(med[i].r);
31 st[i]=false;
32 }
33 }
34 }
35 void solve()
36 {
37 cin>>n>>m;
38 for(int i=1;i<=m;i++)
39 cin>>med[i].l>>med[i].r;
40 sort(med+1,med+1+m,[](struct node a,struct node b)->bool {return a.l==b.l?a.r<b.r:a.l<b.l;});
41 //for(int i=1;i<=m;i++) cout<<med[i].l<<' '<<med[i].r<<endl;
42 dfs(0);
43 cout<<res<<endl;
44
45 }
46 int main()
47 {
48 int T = 1;
49 //cin >> T;
50 while(T --)
51 {
52 solve();
53 }
54 return 0;
55 }
然后考虑dp
注意到n最大为1e9,肯定不能作为下标,m=1e5,可以考虑,f[i]的表示的集合为只用前i种药,且一定会吃第i种药,属性为集合中的方案数
f[i]=sum(第i-1满足的条件之和) 因为吃药会变成med.r一定要按照r排序,也注意到第i-1满足条件的一定是一个区间,可以用树状数组,因为med.r为递增,也可以前缀和
0为特殊的药(0,0),前缀和习惯从1开始,所以可以从2开始读入每条边,后排序,枚举每个药品,找到前面能吃到这个药l-1的区间左右端点,进行二分,在进行f的前缀区间累加
1 #include<bits/stdc++.h>
2
3 using namespace std;
4 #define endl "\n";
5 typedef pair<int,int> PII;
6 typedef long long ll;
7 const int N=1e5+10,M=2*N;
8 const int p=1e9+7;
9 ll n,m;
10 struct node
11 {
12 int l, r;
13
14 }med[N];
15 ll f[N],s[N];
16 ll res;
17 int getl(int x)
18 {
19 int l=1,r=m+1;
20 while(l<r)
21 {
22 int mid=l+r>>1;
23 if(med[mid].r>=x) r=mid;
24 else l=mid+1;
25 }
26 return l;
27 }
28 int getr(int x)
29 {
30 int l=1,r=m+1;
31 while(l<r)
32 {
33 int mid=l+r+1>>1;
34 if(med[mid].r<=x) l=mid;
35 else r=mid-1;
36 }
37 return l;
38 }
39 void solve()
40 {
41 cin>>n>>m;
42 for(int i=2;i<=m+1;i++) cin>>med[i].l>>med[i].r;
43 sort(med+1,med+2+m,[](struct node a,struct node b)->bool {return a.r<b.r;});
44 //for(int i=1;i<=m;i++) cout<<med[i].l<<' '<<med[i].r<<endl;
45 f[1]=1,s[1]=1;
46 for(int i=2;i<=m+1;i++)
47 {
48 int l=getl(med[i].l),r=getr(med[i].r-1);
49 //s[i]=s[i-1];
50 f[i]=(s[r]-s[l-1])%p;
51 s[i]=(s[i-1]+f[i])%p;
52 if(med[i].r==n) res=(res+f[i])%p;
53 }
54 cout<<(res+p)%p<<endl;
55 }
56 int main()
57 {
58 ios::sync_with_stdio(false);
59 cin.tie(0);
60 int T = 1;
61 //cin >> T;
62 while(T --)
63 {
64 solve();
65 }
66 return 0;
67 }
关闭流同步后运行时间447ms,之前是878ms,最后负数取模还是负数,可以+p后%p得到答案
acwing 智商药的更多相关文章
- tyvj1463 智商问题
背景 各种数据结构帝~各种小姊妹帝~各种一遍AC帝~ 来吧! 描述 某个同学又有很多小姊妹了他喜欢聪明的小姊妹 所以经常用神奇的函数来估算小姊妹的智商他得出了自己所有小姊妹的智商小姊妹的智商都是非负整 ...
- Tyvj 题目1463 智商问题(分块)
P1463 智商问题 时间: 1500ms / 空间: 131072KiB / Java类名: Main 背景 各种数据结构帝~各种小姊妹帝~各种一遍AC帝~ 来吧! 描述 某个同学又有很多小姊妹了他 ...
- 【TYVJ】1463 - 智商问题(二分/分块)
http://tyvj.cn/Problem_Show.aspx?id=1463 二分的话是水题啊.. 为了学分块还是来写这题吧.. 二分: #include <cstdio> #incl ...
- Tyvj P1463 智商问题 分块
P1463 智商问题 时间: 1500ms / 空间: 131072KiB / Java类名: Main 背景 各种数据结构帝~各种小姊妹帝~各种一遍AC帝~ 来吧! 描述 某个同学又有很多小姊妹了他 ...
- 盛希泰:办公室就像男人的春药——人的一生的精力是有限的,你把有限的时间分配给谁决定你的成败——你有N多选择,你人生的积累就是N多选择加起来的结果
欢迎关注“创事记”的微信订阅号:sinachuangshiji 创事记注:12月22日晚上,盛希泰在清华大学旧经管报告厅面对清华师生讲了一堂<创业引导课>.本文由洪泰帮根据课堂录音整理完成 ...
- 【tyvj1463】智商问题 [分块][二分查找]
Background 各种数据结构帝~各种小姊妹帝~各种一遍AC帝~ 来吧! Description 某个同学又有很多小姊妹了他喜欢聪明的小姊妹 所以经常用神奇的函数来估算小姊妹的智商他得出了自己所有 ...
- 2018-01-05-医药行业的IT革命探讨
layout: post title: 2018-01-05-医药行业的IT革命探讨 key: 20180105 tags: IT AI 医疗 modify_date: 2018-01-05 --- ...
- 腾讯机试题 AcWing 603 打怪兽
题目链接:https://www.acwing.com/problem/content/605/ 题目大意: 略 分析: 用dp[i][j]表示用j元钱能在前i只怪兽上所能贿赂到的最大武力值. 有一种 ...
- 又一家药企IPO被拒,原因竟然是……
版权所有,未经授权不得转载,QQ:231469242 导读 近日,中国证监会官网发布公告,河南润弘制药首发未IPO能通过,成为今年第4家IPO被否的制药企业.中国证监会拒绝润弘制药的原因是润弘制药产品 ...
- noi 2727:仙岛求药
2727:仙岛求药 总时间限制: 1000ms 内存限制: 65536kB 描述 少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶.叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难 ...
随机推荐
- sql server 使用sql语句导出二进制文件到本地磁盘
sp_configure 'show advanced options', 1;GORECONFIGURE;GOsp_configure 'Ole Automation Procedures', 1; ...
- 目标检测 | Farthest Point Sampling 及其 CUDA 实现
Farthest Point Sampling 及其 CUDA 实现 目录 Farthest Point Sampling 及其 CUDA 实现 概述 均匀随机采样 Farthest Point Sa ...
- LCP 11. 期望个数统计
地址:https://leetcode-cn.com/problems/qi-wang-ge-shu-tong-ji/ <?php /** 某互联网公司一年一度的春招开始了,一共有 n 名面试者 ...
- Swagger OpenAPI Schema 为空时 Example Value 显示 "string" 的原因及解决方案
解决Swagger UI示例值显示"string"的问题 最近在使用ObjectScript生成JSON接口文档时,遇到了一个奇怪的问题: 生成的JSON数据是正常的. 但Swag ...
- FastAPI 查询参数完全指南:从基础到高级用法 🚀
title: FastAPI 查询参数完全指南:从基础到高级用法 date: 2025/3/6 updated: 2025/3/6 author: cmdragon excerpt: 探讨 FastA ...
- 使用PySide6/PyQt6实现Python跨平台通用列表页面的基类设计
我在随笔<使用PySide6/PyQt6实现Python跨平台GUI框架的开发>中介绍过PySide6/PyQt6 框架架构的整体设计,本篇随笔继续深入探讨框架的设计开发工作,主要针对通用 ...
- centos 防火墙配置,并限制端口
查看防火墙状态 systemctl status firewalld 如果防火墙处于停止状态,则启动它: systemctl start firewalld 并设置防火墙开机自启: systemctl ...
- python正则表达式笔记1
最近工作中经常用到正则表达式处理数据,慢慢发现了正则表达式的强大功能,尤其在数据处理工作中,记录下来分享给大家. 一. 正则表达式语法介绍 正则表达式(或 RE)指定了一组与之匹配的字符串:模块内的函 ...
- 从 PostgreSQL 升级至 IvorySQL 4.0
本文作者:严少安,IvorySQL 贡献者. 本文为授权转载. 2024 年 8 月,我在<PG 12 即将退役,建议升级到 16.4>一文中提到,PostgreSQL 12 版本即将&q ...
- 密码加密|jsencrypt|md5|加密解密的两种方式
一.md5 npm install md5 二.JSEncrypt 2.1 介绍 JSEncrypt属于RSA加密,RSA加密算法是一种非对称加密算法: 2.2 使用 安装: npm install ...