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[ ...
随机推荐
- Java Hashtable遍历与方法使用
参考文档 我参考了Java 集合系列11之 Hashtable详细介绍(源码解析)和使用示例,阅读了jdk 1.8的源码 Hashtable的继承关系 Hashtable继承了Dictionary类, ...
- 5G风口之下,NFV为何发展迅速
导读 5G高带宽.低时延.大容量的接入方式,注定它一定要依赖于跟以往完全不同的专业设备模式来实现,因此也创造了更多的方向和机会.NFV就是其中之一. 5G最大的变化在网络层面,需要底层网络架构形成一种 ...
- jQuery Validation Engine
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...
- 《Netlogo多主体建模入门》笔记3
3- 用“生命游戏”认识Patch 代码: patches-own[living] to setup clear-all ask patches [ < 0.3[ set pcolo ...
- PHP 附录 : 用户注册与登录完整代码
login.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:// ...
- git/github使用详解
介绍:gitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名gitHub. 2018年6月4日,微软宣布,通过75亿美元的股票交易收购代码托管平台Gi ...
- 吴裕雄--天生自然JAVA数据库编程:CallableStatement接口
DELIMITER // DROP PROCEDURE myproc // -- 删除过程 CREATE PROCEDURE myproc(IN p1 int,INOUT p2 int,OUT p3 ...
- 扩展的Sobel 算子
Custom Extended Sobel Filters https://arxiv.org/pdf/1910.00138.pdf sobel算子是进行边缘检测的一个重要算子.它通常是一个3x3的 ...
- 洛谷 P2031 脑力达人之分割字串
题目传送门 解题思路: f[i]表示到第i位可获得的最大分割次数,对于每个f[i]都可由其符合条件的前缀转移过来,条件就是当前串除了前缀的剩余字符里有所给单词,然后一看,这不是在剩余字符里找有没有所给 ...
- VUE - vuex state的使用
1,安装 进入项目目录,执行 vue add vuex 命令 2,会在src的目录下新增store文件夹 3,打开store文件夹下的index.js , 给 state 设定一些数据 impor ...