HZNU-ACM寒假集训Day11小结 贪心
1.刘汝佳紫书区间问题三大情况
1.选择不相交区间
贪心策略:一定要选择第一个区间
2.区间选点问题
贪心策略:取最后一个点
3.区间覆盖问题: n个闭区间,选择尽量少的区间覆盖一条指定线段[s,t]
贪心策略:预处理掉[s,t]之外的区间,闭区间从最左向右开始覆盖
应用
Open Judge 1328
要求建在x轴半径d的雷达覆盖所有已知点
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<queue>
#include<deque>
#include<set>
#include<map>
#include<cmath>
#include<stack>
const double PI = acos(-1.0);
#define eps 1e-6
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std; struct P {
double a;
double b;
friend bool operator <(const P& x, const P& y) {
if (x.b != y.b) return x.b < y.b;
else return x.a > y.a;
}
}; P p[]; int main() {
double d,xi,yi;
int n;
int kase = ;
while (scanf("%d%lf", &n, &d), n||d) {
memset(p, , sizeof p);
int t = ;
for (int i = ; i < n; i++) {
scanf("%lf%lf", &xi, &yi);
if (yi > d||yi<) {
t = ;
}
p[i].a = xi - sqrt(d * d - yi * yi);
p[i].b = xi + sqrt(d * d - yi * yi);
}
if (!t) printf("Case %d: -1\n", kase++);
if (!t) continue;
sort(p, p + n);
int ans = ;
double f = p[].b;
for (int i = ; i < n; i++) {
if (p[i].a > f) f = p[i].b, ans++;
}
printf("Case %d: %d\n", kase++, ans);
} return ;
}
POJ 1065
描述
C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的时间,如果第i+1个木棒的重量和长度都大于等于
第i个处理的木棒,那么将不会耗费时间,否则需要消耗一个单位的时间。因为急着去约会,C小加想在最短的时间内把木棒处理完,你能告诉他应该怎样做吗?
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<queue>
#include<deque>
#include<set>
#include<map>
#include<cmath>
#include<stack>
const double PI = acos(-1.0);
#define eps 1e-6
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std; struct R {
int l;
int w;
friend bool operator <(const R& a, const R& b) {
if (a.w != b.w) return a.w < b.w;
else return a.l < b.l;
}
}; int vis[];
R a[]; int main() {
int T,n;
scanf("%d", &T);
while (T--) {
memset(vis, , sizeof vis);
memset(a, , sizeof a);
scanf("%d", &n);
for (int i = ; i < n; i++) scanf("%d%d", &a[i].l, &a[i].w);
sort(a, a + n);
int ans = ;
int cnt = ;
while (cnt!=n) {
ans++;
int f = -;
for (int i = ; i < n; i++) {
if (vis[i]) continue;
if (a[i].l >=f) f = a[i].l, cnt++, vis[i] = ;
}
}
printf("%d\n", ans);
}
return ;
}
有点思维的题
code:
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<queue>
#include<deque>
#include<set>
#include<map>
#include<cmath>
#include<stack>
const double PI = acos(-1.0);
#define eps 1e-6
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std; int Hash[]; int main() {
int T,n;
int x, y;
scanf("%d", &T);
while (T--) {
memset(Hash, , sizeof Hash);
scanf("%d", &n);
for (int i = ; i < n; i++) {
scanf("%d%d", &x, &y);
if (x > y) swap(x, y);
if (x & ) x >>= ;
else x = x - >> ;
if (y & ) y >>= ;
else y = y - >> ;
for (int i = x; i <= y; i++) Hash[i]++;
}
int Max = -;
for (int i = ; i < ; i++) {
Max = max(Max, Hash[i]);
}
printf("%d\n", Max*);
}
return ;
}
可以对比的两题:
贪心策略:后悔法
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
using namespace std;
struct f {
long long d;
long long x;
} a[];
bool cmp(f A, f B) { return A.d < B.d; }
priority_queue<long long, vector<long long>, greater<long long> > q;
int main() {
long long n, i, j;
cin >> n;
for (i = ; i <= n; i++) {
scanf("%d%d", &a[i].d, &a[i].x);
}
sort(a + , a + n + , cmp);
long long ans = ;
for (i = ; i <= n; i++) {
if (a[i].d <= q.size()) {
if (q.top() < a[i].x) {
ans += a[i].x - q.top();
q.pop();
q.push(a[i].x);
}
} else {
ans += a[i].x;
q.push(a[i].x);
}
}
cout << ans << endl;
return ;
}
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<queue>
#include<deque>
#include<set>
#include<map>
#include<cmath>
#include<cstring>
#include<stack>
const double PI = acos(-1.0);
#define eps 1e-6
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std; struct P {
int d;
int s;
friend bool operator < (const P& a, const P& b) {
return a.s >b.s;
}
}; P p[];
int vis[]; int main() {
int T;
int n;
int tot;
scanf("%d", &T);
while (T--) {
tot = ;
scanf("%d", &n);
memset(p, , sizeof p);
memset(vis, , sizeof vis);
for (int i = ; i < n; i++) scanf("%d", &p[i].d);
for (int i = ; i < n; i++) scanf("%d", &p[i].s);
sort(p, p + n);
for (int i = ; i < n; i++) {
int x = p[i].d;
while (x) {
if (!vis[x]) {
vis[x] = ;
break;
}
x--;
}
if (!x) tot += p[i].s;
}
printf("%d\n", tot);
}
return ;
}
HZNU-ACM寒假集训Day11小结 贪心的更多相关文章
- 中南大学2019年ACM寒假集训前期训练题集(基础题)
先写一部分,持续到更新完. A: 寒衣调 Description 男从戎,女守家.一夜,狼烟四起,男战死沙场.从此一道黄泉,两地离别.最后,女终于在等待中老去逝去.逝去的最后是换尽一生等到的相逢和团圆 ...
- 中南大学2019年ACM寒假集训前期训练题集(入门题)
A: 漫无止境的八月 Description 又双叒叕开始漫无止境的八月了,阿虚突然问起长门在这些循环中团长哪几次扎起了马尾,他有多少次抓住了蝉等等问题,长门一共回复n个自然数,每个数均不超过1500 ...
- HZNU-ACM寒假集训Day10小结 单调栈-单调队列
数据结构往往可以在不改变主算法的前提下题高运行效率,具体做法可能千差万别,但思路却是有规律可循 经典问题:滑动窗口 单调队列O(n) POJ 2823 我开始写的: TLE 说明STL的库还是有点慢 ...
- HZNU-ACM寒假集训Day8小结 最小生成树
最小生成树(无向图) Kruskal 给所有边按从小到大排序 形成环则不选择(利用并查集) P1546 最短网络 https://www.luogu.com.cn/problem/P1546 #i ...
- HZNU-ACM寒假集训Day3小结 搜索
简单搜索 1.DFS UVA 548 树 1.可以用数组方式实现二叉树,在申请结点时仍用“动态化静态”的思想,写newnode函数 2.给定二叉树的中序遍历和后序遍历,可以构造出这棵二叉树,方法是根据 ...
- HZNU-ACM寒假集训Day1小结 STL 并查集
常用STL 1.优先队列 priority_queue 内部是用堆(heap)实现的 priority_queue<int> pq; 默认为一个“越小的整数优先级越低的优先队列” 对于一些 ...
- HZNU-ACM寒假集训Day12小结 数论入门 题解
算不出的等式 BJOI2012 看到这题 真没什么办法 无奈看题解 1.注意到p/q 联想到斜率 2.注意到 [ ] 联想到整点 注意到k在变化,构造一次函数 f(x)=p/q*x ,g(x)=q/p ...
- HZNU-ACM寒假集训Day12小结 数论入门
符号说明 a|b a整除b (a,b) a与b的最大公因数 [a,b] a与b的最小公倍数 pα||a pα|a但pα+1∤a a≡b(mod m) a与b对模m同余 a ...
- HZNU-ACM寒假集训Day10小结 树-树形DP
树形DP 加分二叉树 洛谷P1040 注意中序遍历的特点:当根节点编号k时,编号小于k的都在其左子树上,编号大于k的都在右子树 转移方程 f[i,j]=max{f[i,k-1]*f[k+1,j]+d[ ...
随机推荐
- vue导航守卫和axios拦截器的区别
在Vue项目中,有两种用户登录状态判断并处理的情况,分别为:导航守卫和axios拦截器. 一.什么是导航守卫? vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航.(在路由跳转时 ...
- 【剑指Offer面试编程题】题目1389:变态跳台阶--九度OJ
题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入包括一个整数n(1 ...
- jmeter分布式linux负载机,windows主控机
1.将参数化文件上传到linux服务器,放在linux上jmeter的bin路径下 2.设置server.rmi.ssl.disable=true 分别修改主控机和负载机的jmeter.propert ...
- js 字符串 常用处理方式(检索、截取、拼接、批量替换)
// 检索(字符串中判断是否包含某个字符) 字符串.search('检索的内容');// 返回-1,不包含: 返回非-1,包含 字符串.indexOf("待判断的内容"); // ...
- 标准模板库中的优先队列(priority_queue)
//C++数据结构与算法(第4版) Adam Drozdek 著 徐丹 吴伟敏<<清华大学出版社>> #include<queue> priority_queu ...
- 【随缘更(gu)】牛客D4简要思路(没有题解)
T1 当然不能枚举每个区间,于是我们考虑算贡献. 对于每个位置i,我们计算其作为区间内第一个出现ai的位置的区间总数,则有ans=sigma( i - last[i] ) * ( n - i + 1 ...
- python读取csv转换为dataframe
前言: 由于在处理结构性数据的时候经常会读取本地形如:.xls.xlsx.csv等的数据.所以今天就花了点时间来总结一下利用python读取csv数据并且转换为dataframe的数据框架.话不多说, ...
- Linux下四种安装软件方式
1.yum源安装 可以解决依赖关系,但不确定安装的位置 2.rpm 基础安装 要自己解决依赖问题 rpm -ivh 安装 rpm -uvh 更新 rpm -e --nodeps 卸载 取消依赖 ...
- LR_问题_平均响应时间解释,summary与analysis不一致----Summary Report中的时间说明
Summary是按整个场景的时间来做平均的,最大最小值,也是从整个场景中取出来的. (1) 平均响应时间:事物全部响应时间做平均计算 (2) 90%响应时间:将事物全部响应时间 ...
- 【题集】k倍区间(抽屉原理)
例1:http://lx.lanqiao.cn/problem.page?gpid=T444 蓝桥杯 问题描述 给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, A ...