【题目链接】:http://codeforces.com/contest/822/problem/C

【题意】

有n个旅行计划,
每个旅行计划以开始日期li,结束日期ri,以及花费金钱costi描述;
让你在这n个旅行计划中选出两个计划;
要求这两个计划的日期没有相交的部分;
且这两个日期的总时间长度恰好为x;
让你求最小花费

【题解】

先把每个计划按照左端点第一优先级,右端点第二优先级升序排序;
然后定义一个dp[x]数组,表示在前i个计划中,时长为x,且右端点的位置< a[i].l的一个旅行计划的最小花费;
更新的时候:
len = a[i].r-a[i].l+1;
ans = min(ans,a[i].cost+dp[x-len]);
对于到达的第i个计划;
先看看有没有哪个之前哪个计划从这个位置开始才满足r< a[i].l的;用那些来更新dp数组;
然后在更新完毕之后,在找到这个第i个计划从哪个位置开始,满足a[i].r< l暂时先存着.

【Number Of WA】

1

【反思】

在写的时候,把二分答案的初始值给赋错了;
很伤心。
还是缺少经验啊。

【完整代码】

#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x)
#define Open() freopen("F:\\rush.txt","r",stdin)
#define Close() ios::sync_with_stdio(0)typedef pair<int,int> pii;
typedef pair<LL,LL> pll;const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int INF = 2e5+100;
const int N = 2e5+100;struct abc{int l,r,cost;
};int n,x,dic[INF],ans = 21e8;
abc a[N];
vector <abc> need[N];bool cmp(abc a,abc b){if (a.l != b.l)return a.l < b.l;elsereturn a.r < b.r;
}int main(){//Open();Close();cin >> n >> x;rep1(i,1,n){cin >> a[i].l >> a[i].r >> a[i].cost;}sort(a+1,a+1+n,cmp);abc temp;int len;rep1(i,1,n){while ( (int) need[i].size()){temp = need[i].back();need[i].pop_back();len = temp.r-temp.l+1;if (!dic[len]){dic[len] = temp.cost;}else{dic[len] = min(dic[len],temp.cost);}}temp = a[i];len = temp.r - temp.l+1;if (x >= len && dic[x-len]){ans = min(ans,temp.cost+dic[x-len]);}int l = i +1 ,r = n;int idx = n+1;while (l <= r){int mid = (l+r)>>1;if (a[mid].l > a[i].r){idx = mid;r = mid - 1;}elsel = mid + 1;}need[idx].push_back(temp);}if (ans > (int) 20e8)cout << -1 << endl;elsecout << ans << endl;return 0;
}

转载于:https://www.cnblogs.com/AWCXV/p/7626222.html

【Codeforces Round #422 (Div. 2) C】Hacker, pack your bags!(二分写法)相关推荐

  1. Codeforces Round #422(Div 2)

    A =w= B QvQ C 题意: 有n条线段(n<=2e5) 每条线段有左端点li,右端点ri,价值cost(1<=li<=ri<=2e5,cost<=1e9) 对于一 ...

  2. Codeforces Round #280 (Div. 2) D. Vanya and Computer Game 二分

    D. Vanya and Computer Game Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contes ...

  3. Codeforces Round #700 (Div. 2) C. Searching Local Minimum 交互二分

    传送门 题意: 给一个数组,让你找到a[i]<min(a[i+1],a[i−1])a[i]<min(a[i+1],a[i-1])a[i]<min(a[i+1],a[i−1])位置ii ...

  4. Codeforces Round #703 (Div. 2) Guessing the Greatest C1 C2 二分

    link 题意:交互题,每次可以询问一个区间的次大值,保证所有值都不相同,求最大值位置.easy是询问最多40次,hard最多20次. 交互题大部分都是二分,可以向二分考虑. easy比较好想,假设当 ...

  5. Codeforces Round #223 (Div. 2): C. Sereja and Prefixes(二分+递归)

    题意: 你有一个序列,一开始为空,之后进行m次操作,操作有两种: 1 x:在当前序列后面添加一个数x 2 x, y:将序列的前x个数复制y遍接序列后面(x<10000) 之后n次询问,每次询问位 ...

  6. Codeforces Round #703 (Div. 2)C1C2 Guessing the Greatest(二分)

    题意: 交互题. query l,r区间内第二大的数,要求得到整个数组最大的数. 思路:首先我们对整体数组进行query 找到第二大的数所在的位置,设这个位置为p. 然后分别对[1,p]和[p,n]进 ...

  7. 【Codeforces Round #523 (Div. 2) D.TV Shows】 贪心+二分

    D. TV Shows 题意 给你要看的n个电视节目的 l i 和 r i l_i和r_i li​和ri​,每次要申请一个新的电视的花费是 x + ( r i − l i ) ∗ y x+(r_i-l ...

  8. Codeforces Round #797 (Div. 3)无F

    Codeforces Round #797 (Div. 3)无F 这打的也太屎了,白天把G补了才知道简单的很,但f还是没头绪呜呜呜 Problem - A - Codeforces Given the ...

  9. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

最新文章

  1. 如何编写服务器文档记录
  2. 计算机的硬件性能指标(图片部分资源摘自王道考研资料)
  3. 图的知识点总结-数据结构
  4. wow 私服trinitycore
  5. 运行控制器方法之前先执行注解@ModelAttribute的方法
  6. 第十三章 大型网站典型故障分析案例(待续)
  7. CSS侦测方法(侦测是否支持某个CSS属性)
  8. 在线图片压缩png 和 gif,docsmall.com
  9. 通信中间件 Fast DDS 基础概念简述与通信示例
  10. ESP32 INMP441麦克风驱动
  11. 计算机刚启动时会显示,电脑启动时出现Windows错误恢复怎么解决?
  12. HC05蓝牙模块主机与从机进行连接通信
  13. 一个测试经理/测试主管/测试总监的工作总结
  14. 如何卸载360安全客户端
  15. 论文写作学习之引言章节撰写(学习深度之眼课程笔记,侵删)
  16. Importance Weighted Adversarial Nets for Partial Domain Adaptation学习笔记
  17. 知识分享:配音员与声优的区别
  18. 英勇的战士——斯巴达
  19. Linux 终端terminal设置透明化
  20. 解决高分辨率屏幕老版软件适配问题

热门文章

  1. micropython c语言_micropython mp对象和c类型的转换
  2. css 选座,纯html+css中实现静态选座位效果技巧(input+label使用小技巧)
  3. pandas 替换 某列大于_Pandas使用总结
  4. mysql练习(重)
  5. 对于springmvc的入门学习 2021-04-19
  6. 用python让excel飞起来 pdf_讯飞智能键盘K710 一款无网络实力依然在线的黑科技产品...
  7. jenkins访问地址_运维机器人hubot集成jenkins
  8. mysql 存储过程简单使用_mysql存储过程的简单使用教程
  9. python输入数字是什么类型的游戏_“数字炸弹”——一个练习Python基础知识的小游戏...
  10. mysql 获取递增id_如何在MySQL中获取下一个自动递增ID?