F-小富的idea(2023河南萌新联赛第(四)场:河南大学)

卷王小富最近又在内卷,并且学了一门新的技能:书法,但是不幸的是在国庆节的书法大赛上,小富不小心打翻了墨水瓶,导致很多墨滴溅在了他的书法纸上,看着墨水不断扩散,浸透了他的书法纸,小富突然萌生了一个想法:我能不能知道某时刻纸上一共有多少墨块? 

我们假设墨滴是同时溅在纸上的,并且它们起始大小都为 0,由于墨滴大小不同,因此它们的扩散速度也不同,姑且假设墨滴都是按圆形扩散,如果两个或以上墨滴在扩散过程中相遇,那么就称它们为一个墨块(单独一个墨滴也是墨块),并且假设墨滴相遇不影响它的扩散,对于任意时刻 tt,小富想知道纸上有多少墨块 

由于小富是ccpc金牌,这个问题对他来说简直是小菜一碟,并且小富还要继续他的书法大赛,于是他决定把这个问题交给你来解决,希望你不要辜负他的期望哦 

输入描述:

 

第一行一个整数 nn,表示一共 nn 个墨滴(1≤n≤10^3)

接下来 n 行,每行三个整数 x,y,v,分别表示墨滴的位置 (x,y),以及墨滴扩散的速度 v(0≤x,y,v≤103)

接下来一行一个整数 q,表示 q 次查询(0≤q,t≤10^3)

之后是 q 行,每行一个整数 t ,表示查询 t 时刻纸上一共多少个墨块

输出描述:

 

q 行,每行一个整数,表示 t 时刻纸上一共多少个墨块

示例1

输入

3
0 2 1
0 0 1
7 7 2
3
0
1
5

输出

3
2
1

说明

0时刻墨滴面积均为0,故答案为3

1时刻墨滴1,2相切,也记为相遇,故答案为2

5时刻三个墨滴都相遇,答案为1

思路:

        题目让求的是每次询问的时候,t时刻桌面上有多少墨水。那么一开始所有墨水没有扩散,此时是不是就是有n个墨水。那么再想想,俩块墨水什么时候会变成一块墨水,而题中墨水一开始大小都是0,那么是不是可以抽象为,俩个墨点之间要多久才能从这个墨点到达另一个墨点。

那么此时不就能得到多少时间会有墨点相融合,而融合事后的墨点就用并查集,将他们连起来。

(数据不超过1e3,所以预处理墨点合成时间是不会超时的)。当询问的时候采用离线处理的方法。还有一个小技巧就是,询问和预处理的放在一起,但是由于t时刻可能有刚好融合的,那么我们把t+1e-7这样询问就会在t时刻之后,从而解决t时刻有融合的问题

#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<stack>
#include<string>
#include<algorithm>
#include<unordered_map>
#include<map>
#include<bitset>
#include<cstring>
#include <unordered_set>
//#include<priority_queue>
#include<queue>
#include<deque>
#include<set>
#include<stdlib.h>
#define dbug cout<<"hear!"<<endl;
#define rep(a,b,c) for(ll a=b;a<=c;a++)
#define per(a,b,c) for(ll a=b;a>=c;a--)
#define no cout<<"NO"<<endl;
#define yes cout<<"YES"<<endl;
#define endl "\n"
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
//priority_queue<int,vector<int>,greater<int> >q;
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<ll, ll> PII;
typedef pair<long double,long double> PDD;ll  INF = 0x3f3f3f3f;
//const ll LINF=LLONG_MAX;
// int get_len(int x1,int y1,int x2,int y2)
// {
//   return (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1);
// }
const ll N = 1e6+ 10;
const ll mod1 =998244353;
const ll mod2 =1e9+7;
const ll hash_num = 3e9+9;
ll n,m,ca, k,ans;
ll arr[N],brr[N],crr[N];ll h[N],ne[N],e[N],w[N],book[N],idx;
ll par[N];
struct node
{ll x,y,v;
}noda[N];struct query
{double time;ll l,r;
}q[N];bool cmp(query a,query b)
{return a.time<b.time;
}double get_len(double x1,double y1,double x2,double y2)
{return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}ll findd(ll x)
{if(par[x]!=x)par[x]=findd(par[x]);return par[x];
}void init()
{rep(i,1,n){par[i]=i;}
}void solve()
{cin >> n;idx=0;rep(i,1,n){cin >> noda[i].x >> noda[i].y >> noda[i].v;}rep(i,1,n){rep(j,i+1,n){double t=get_len(noda[i].x,noda[i].y,noda[j].x,noda[j].y)/(noda[i].v+noda[j].v);q[idx].time = t;q[idx].l = i;q[idx++].r = j;}}cin >> m;rep(i,1,m){cin >> q[idx].time;q[idx].time+=1e-7;q[idx].l=-1;q[idx++].r=i;}sort(q,q+idx,cmp);ll now=n;init();rep(i,0,idx-1){if(q[i].l==-1){arr[q[i].r]=max(now,ll(0));}else{ll fa=findd(q[i].l),fb=findd(q[i].r);if(fa!=fb){par[fa]=fb;now--;}}}rep(i,1,m){cout << arr[i]<<endl;}
}int main()
{IOS;ll _;_=1;//get_eulers();//scanf("%lld",&_);//cin>>_;ca=1;while(_--){solve(); ca++;}    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/20313.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go重写Redis中间件 - Go实现内存数据库

GO实现内存数据库 前面我们实现了一个简单的回发Redis,这里我们要实现一个真正的Redis内核 实现底层Dict数据结构 新建一个datastruct文件夹,放一些我们要用的数据结构,比如Redis的核心起始就是一个map,再新建一个包实现这个map或者叫字典,字典的底层使用的就是map di…

【FAQ】调用EasyDSS返回的直播快照接口,无法编辑只能新建的原因排查与解决

EasyDSS视频直播点播平台集视频直播、点播、转码、管理、录像、检索、时移回看等功能于一体&#xff0c;可提供音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务&#xff0c;在应用场景上&#xff0c;平台可以运用在互联网教育、在线课堂、游戏直播等领域…

【H5移动端】常用的移动端方案合集-键盘呼起、全面屏适配、图片大小显示、300ms点击延迟、首屏优化(不定期补充~)

文章目录 前言键盘呼起问题靠近底部的输入项被键盘遮挡底部按钮被顶上去 全面屏适配图片大小显示问题解决300ms延迟首屏优化 前言 这篇文章总结了我在工作中做H5遇到的一些问题&#xff0c;包括我是怎么解决的。可能不是当下的最优解&#xff0c;但是能保证解决问题。 单位适…

智慧防汛,数字科技的力量

随着夏日的脚步临近&#xff0c;台风季节即将降临。对于那些居住在沿海地区的人们来说&#xff0c;台风是一种常见的自然灾害&#xff0c;其带来的风雨可能对生命和财产造成严重威胁。然而&#xff0c;随着数字科技的飞速发展&#xff0c;可视化技术为防汛抗台工作带来了全新的…

【C++】STL——queue的介绍和使用、queue的push和pop函数介绍和使用、queue的其他成员函数

文章目录 1.queue的介绍2.queue的使用2.1queue构造函数2.2queue的成员函数&#xff08;1&#xff09;empty() 检测队列是否为空&#xff0c;是返回true&#xff0c;否则返回false&#xff08;2&#xff09;size() 返回队列中有效元素的个数 &#xff08;3&#xff09;front() 返…

在使用Python爬虫时遇到解析错误解决办法汇总

在进行Python爬虫任务时&#xff0c;遇到解析错误是常见的问题之一。解析错误可能是由于网页结构变化、编码问题、XPath选择器错误等原因导致的。为了帮助您解决这个问题&#xff0c;本文将提供一些实用的解决办法&#xff0c;并给出相关的代码示例&#xff0c;希望对您的爬虫任…

无涯教程-Lua - Modules(模块)

模块就像可以使用 require 加载的库&#xff0c;并且具有包含Table的单个全局名称&#xff0c;该模块可以包含许多函数和变量。 Lua 模块 其中一些模块示例如下。 -- Assuming we have a module printFormatter -- Also printFormatter has a funtion simpleFormat(arg) -- …

手把手教你安装Eclipse最新版本的详细教程 (非常详细,非常实用)

简介 首先声明此篇文章主要是针对测试菜鸟或者刚刚入门的小伙们或者童鞋们&#xff0c;大佬就没有必要往下看了。 写这篇文章的由来是因为后边要用这个工具&#xff0c;但是由于某些原因有部分小伙伴和童鞋们可能不会安装此工具&#xff0c;为了方便小伙伴们和童鞋们的后续学习…

[Linux]手把手教你制作进度条小程序

[Linux]制作进度条小程序 文章目录 [Linux]制作进度条小程序C语言中的\n和\r字符缓冲区的刷新策略进行进度条代码编写 C语言中的\n和\r字符 C语言中字符分为两种: 可显字符控制字符 其中可显字符就是字符a这类的字符&#xff0c;控制字符就是\n这种控制字符。 对于我们制作…

【Axure教程】移动端二级滑动选择器

今天教大家制作移动端二级滑动选择器的原型模板&#xff0c;该原型已全国一二级省市选择器为案例&#xff0c;因为该原型用中继器做的&#xff0c;所以制作完成之后使用也很方便&#xff0c;只需修改中继器表格里的内容即可 一、效果展示 1. 拖动选择 2. 快捷选择 【原型预览…

Docker的安装和部署

目录 一、Docker的安装部署 &#xff08;1&#xff09;关闭防火墙 &#xff08;2&#xff09;关闭selinux &#xff08;3&#xff09;安装docker引擎 &#xff08;4&#xff09;启动docker &#xff08;5&#xff09;设置docker自启动 &#xff08;6&#xff09;测试doc…

自然语言处理学习笔记(二)————语料库与开源工具

目录 1.语料库 2.语料库建设 &#xff08;1&#xff09;规范制定 &#xff08;2&#xff09;人员培训 &#xff08;3&#xff09;人工标注 3.中文处理中的常见语料库 &#xff08;1&#xff09;中文分词语料库 &#xff08;2&#xff09;词性标注语料库 &#xff08;3…

巧用位运算来解决2的幂次方

1 什么是位运算呢&#xff1f; 按位与操作是一种二进制运算符&#xff0c;用符号 & 表示。它逐位比较两个操作数的对应位&#xff0c;只有当两个对应位同时为1时&#xff0c;结果的对应位才为1&#xff0c;否则为0。 按位与操作的规则如下&#xff1a; 如果两个对应位都…

8.2小非农ADP数据来袭黄金将会如何表现?

近期有哪些消息面影响黄金走势&#xff1f;黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a; 周二(8月1日)现货黄金价格回落&#xff0c;原因是美元指数升创7月10日以来新高至102.43.美联储官员乐观言论夯实美国经济软着陆预期。此外&#xff0c;中国刺激措施将…

《皮囊》阅读笔记

《皮囊》阅读笔记 2023年8月2号在杭州小屋读完&#xff0c;该书共收录14篇散文&#xff0c;内容大致分为两部分&#xff1a;前半部分讲述作者的阿太&#xff08;外婆的母亲&#xff09;、母亲、父亲关于生活哲学、房子、疾病与信仰的故事&#xff0c;后半部分讲述生活在小镇的张…

SpringBoot 整合 Minio

官网&#xff1a; MinIO 是一个基于 Go 实现的高性能、兼容 S3 协议的对象存储。它采用 GNU AGPL v3 开源协议&#xff0c;项目地址是 https://github.com/minio/minio 。 它适合存储海量的非结构化的数据&#xff0c;例如说图片、音频、视频等常见文件&#xff0c;备份数据、…

mysql sql 语句sum求和嵌套数学表达式

今天有个需求, 已减高度 高度 x 单双开(单开1 双开2) x 2,要直接写在sql语句中。 表字段 包含 高度 和 单双开字段 值是字符串 (双开 左单开 右单开) -- 已减高度 2 * 单双开 * 高度 sum( -- 求和 表达式 已减高度 2 * 单双开 * 高度 t_cloth.hegiht * 2 * (case WHEN l…

rust from_utf8_lossy怎么使用?

from_utf8_lossy 是Rust标准库中的一个方法&#xff0c;用于将字节序列解码为UTF-8字符串。它的作用是尽可能地将无效的字节序列转换为有效的Unicode字符&#xff0c;以便进行后续处理。 以下是使用 from_utf8_lossy 方法的示例代码&#xff1a; fn main() {let bytes b"…

QT充当客户端模拟浏览器等第三方客户端对https进行双向验证

在 ssl单向证书和双向证书校验测试及搭建流程 文章中&#xff0c;已经做了基于https的单向认证和双向认证&#xff0c;&#xff0c;&#xff0c; 在进行双向认证时&#xff0c;采用的是curl工具或浏览器充当客户端去验证。 此次采用QT提供的接口去开发客户端向服务器发送请求&a…

【雕爷学编程】 MicroPython动手做(35)——体验小游戏

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…