首页 > 其他分享 >寒假集训Day3

寒假集训Day3

时间:2024-01-19 09:00:53浏览次数:35  
标签:int bound long Day3 寒假 雷达 导弹 集训 这道题

今天主要讲了排序,下面放了一些遇到的比较好的题

种树

https://www.luogu.com.cn/problem/P1250
这道题用的是一个贪心
主要想法是,想要种的树尽量少,就要让重叠部分的树尽量多。重叠部分一定在结尾(我也没想明白为什么)
重点是重叠部分一定在结尾,虽然我也没想明白,但是我发现好像之前也遇到过关于区间的贪心按照结尾由小到大排序的,所以先这么记住,以后遇到类似的区间问题可以按照结尾由小到大排序
然后这道题排序完了之后从小到大扫描每一个结尾,然后种树就可以了

#include <bits/stdc++.h>
using namespace std;
struct tree{
	int	st,ed,v;
}a[100001];
int n,h;
int num = 0;
int pl[10000001] = { };
bool cmp(tree a,tree b) {
	return a.ed < b.ed;
}
int main () {
	scanf("%d %d" ,&n,&h);
	for(int i = 1;i <= h; i++) {
		scanf("%d %d %d" ,&a[i].st,&a[i].ed,&a[i].v);
	}
	sort(a + 1,a + 1 + h,cmp);
	for(int i = 1;i <= h; i++) {
		int k = 0;
		for(int j = a[i].st;j <= a[i].ed; j++) {
			if(pl[j] != 0) k++;
		}
		if(k >= a[i].v) continue;
		for(int j = a[i].ed;j >= a[i].st; j--) {
			if(pl[j] == 0) {
				pl[j] = 1;
				k++;
				num++;
				if(k == a[i].v) break;
			}
		}
	}
	printf("%d" ,num);
	return 0;
}

A-B数对

https://www.luogu.com.cn/problem/P1102
这道题C是定值,求A-B=C,可以转化一下,转化成A=B+C;
这里主要是想提一下lower_bound和upper_bound;
lower_bound(a + 1,a + 1 + n,c) - a返回的是在从1到n的范围内,数组a中第一个大于等于c的数的下标
upper_bound(a + 1,a + 1 + n,c) - a返回的是在从1到n的范围内,数组a中第一个大于c的数的下标
所以这道题可以从前到后遍历一遍,用Lower bound和upper bound找到a[i]+c(也就是B+C)的范围 然后二者做差就是要求的值

#include <bits/stdc++.h>
using namespace std;
long long n,c;
long long a[1000001] = { };
long long num = 0;
int main () {
	scanf("%lld %lld" ,&n,&c);
	for(int i = 1;i <= n; i++) {
		scanf("%lld" ,&a[i]);
	}
	sort(a + 1,a + 1 + n);
	for(int i = 1;i <= n; i++) {
		int x = upper_bound(a + 1,a + n + 1,a[i] + c) - a;
		int y = lower_bound(a + 1,a + n + 1,a[i] + c) - a;
		num += x - y;
	}
	printf("%lld" ,num);
	return 0;
}

导弹拦截

https://www.luogu.com.cn/problem/P1158
注意,这道题和那个最长单调序列的导弹拦截不一样。
按照题意,这道题我一开始想到的是构造两个雷达连线的中垂线,每个雷达只负责拦截自己一侧的导弹;
但是雷达不在坐标轴上,在程序里凭空画中垂线十分困难;
但是按照这样的想法继续看,就会发现我们需要的是找到那个临界雷达,让A覆盖住尽可能多,剩余的应该是离B比较近,交给B覆盖
那我首先让A覆盖住所有的导弹,然后让A放弃最远的导弹,交给B拦截;
然后让A再放弃一枚最远的导弹,把两颗导弹交给B,这时候B的范围就是这两颗中距离他最远的导弹;
以此类推……
所以我们首先可以把A雷达距离导弹的距离升序排列,然后再维护一个数组,这个数组的元素 a[i]表示的是,在a雷达放弃了(n-i)个导弹之后,由B雷达接手后B的覆盖范围
需要注意的是,a[n]=0,而存放A雷达的数组中,第0个元素也是0,模拟的分别是A和B完全放弃不管之后,覆盖全部导弹需要的代价

#include <bits/stdc++.h>
using namespace std;
int n;
int s1,s2;
int t1,t2;
struct d{
	int x;
	int y;
	int dis;
	int id;
}a[10000001];
int dis2[10000001] = { };
bool cmp(d m,d n) {
	return m.dis < n.dis;
}
int main () {
	scanf("%d %d %d %d" ,&s1,&t1,&s2,&t2);
	scanf("%d" ,&n);
	for(int i = 1;i <= n; i++) {
		scanf("%d %d" ,&a[i].x,&a[i].y);
		a[i].dis = pow(a[i].x - s1,2) + pow(a[i].y - t1,2);
		a[i].id = i;
	}
	a[0].dis = 0;
	sort(a + 1,a + 1 + n,cmp);
	dis2[n] = 0;
	for(int i = n - 1;i >= 0; i--) {
		int f = pow(a[i + 1].x - s2,2) + pow(a[i + 1].y - t2,2);
		dis2[i] = max(dis2[i + 1],f);
	}
	int ans = INT_MAX;
	for(int i = 0;i <= n; i++) {
		ans = min(ans,dis2[i] + a[i].dis);
	}
	printf("%d" ,ans);
	return 0;
}

标签:int,bound,long,Day3,寒假,雷达,导弹,集训,这道题
From: https://www.cnblogs.com/Crazyman-W/p/17969581

相关文章

  • P1829 [国家集训队] Crash的数字表格 / JZPTAB
    \[\sum\limits_{i=1}^N\sum\limits_{j=1}^M\frac{ij}{\gcd(i,j)}\]\[\sum\limits_{d=1}^N\frac1d\sum\limits_{i=1}^N\sum\limits_{j=1}^Mij[\gcd(i,j)=d]\]\[\sum\limits_{d=1}^Nd\sum\limits_{i=1}^{\lfloor\fracNd\rfloor}\sum\limits_......
  • 大三寒假学习进度笔记9
    今日学习时间一小时,学习内容:通过不同格式构建DataFrame对象,包括基于Pandas的DF转换,读取text,csv,json和jparquet创建。jparquet具有以下特点:列式存储自带Schema具备PredicateFilter特性一个Parquet文件的内容由Header、DataBlock和Footer三部分组成。在文件的首尾各有一个......
  • Java学习日记 Day3 最难绷的一集
    JavaSE①LinkedList和ArrayList的区别:简单来说后者底层实现是数组,而前者是双向链表。②LinkedList的底层实现:对于集合的添加操作就是链表的操作原理,如果是空的添加,那么首尾指针都是当前节点,如果不是空,那就是当前的Last指针指向待添加节点,然后使Last指针指向该节点。而get方法的......
  • 寒假生活指导10
    #(1)请求对象的定制#(2)获取网页的源码#(3)下载#需求下载的前十页的图片#https://sc.chinaz.com/tupian/qinglvtupian.html1#https://sc.chinaz.com/tupian/qinglvtupian_page.htmlimporturllib.requestfromlxmlimportetreedefcreate_request(page):......
  • 算法学习Day30 n皇后
    Day30n皇后ByHQWQF2024/01/16笔记51.N皇后按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n 皇后问题研究的是如何将n 个皇后放置在n×n的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数n,返回所有不同的 n皇后问题的解决方......
  • Java学习日记 Day3 我怀疑世界就是一个巨大的草台班子
    JavaSE:①包装类:对比基础数据类型有更高级的功能。另外在容器中(或者叫集合)包装类有重要的作用。容器中只能存放包装类,不能存放基础数据类型。包装类一些特性:被final修饰,不能有子类了。。。jdk1.0就有,是开服玩家。。。其实在代码底层中包装类封装了一个int。。。自动装箱自动拆箱......
  • 寒假学习day2
    下载 spark 安装包选择自己Hadoop对应的版本,不然会不兼容spark下载链接2.解压tar-zvxfspark.2.3 3.删除安装包,修改解压后的文件名字rm-rf安装包名mvspark-2.3.4-bin-hadoop2.7spark  4.配置文件进入到spark目录下cdconf (1).修改配置文件名字:mv......
  • 【比赛记录】国庆集训合集
    联赛组国庆训练1\(\text{T1}\)GirlFriend区间3好题。先把质数筛了。考虑将所有区间按照左右端点离散化。将询问离线下来,然后对于每个右端点统计左端点上的贡献。即从小到大扫描\(r\),维护每一个后缀的答案。考虑使用set维护区间的并。考虑已处理前\(r-1\)的询问,处......
  • 寒假生活指导09
    今天写了一点题目:###企业用户界面1.**注册与登录页面**:提供账户注册、登录及密码找回等功能。2.**企业信息管理页面**:展示和编辑企业基本信息,关联碳排放核算的相关数据。<template><divclass="carbon-emissions-calculator"><!--标题--><h1>碳排放核......
  • [国家集训队] 矩阵乘法 整体二分
    [国家集训队]矩阵乘法题目描述给你一个\(n\timesn\)的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第\(k\)小数。输入格式第一行有两个整数,分别表示矩阵大小\(n\)和询问组数\(q\)。第\(2\)到第\((n+1)\)行,每行\(n\)个整数,表示这个矩阵。第\((i+1)\)行......