2020ICPC上海 D - Walker M - Gitignore

news2024/9/24 0:15:06

D:

首先显然要二分,判断当前二分的mid时间下是否能满足走满0~n

枚举所有情况,这里按照左,右起点p1,p2分别讨论

p1向左 p2向左(以下向左和向右都代表向左或者向右到墙,而不代表初速度方向),只需要计算p1或者p2反弹之后还能走距离n就是合法

p1向左 p2向右,这里有四种情况

四种只需要判断上半部分相加是否大于等于n即可

p1向右 p2向左

只需要判断上下一个分支拐弯之后只要有一个可以多走>=n 或者上下两个分支都能走到墙,也就是拐弯之后可以多走的距离>=0即可

p1向右 p2向右:同第一种情况

代码实现

#include <map>
#include <set>
#include <queue>
#include <deque>
#include <cmath>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <unordered_map>
using namespace std;
#define fi first
#define se second
#define u1 (u<<1)
#define u2 (u<<1|1)
#define pb push_back
#define pp pop_back()
#define int long long
#define laile cout<<"laile"<<endl
#define lowbit(x) ((x)&(-x))
#define double long double
#define sf(x) scanf("%lld",&x)
#define sff(x,y) scanf("%lld %lld",&x,&y)
#define sd(x) scanf("%Lf",&x)
#define sdd(x,y) scanf("%Lf %Lf",&x,&y)
#define _for(i,n) for(int i=0;i<(n);++i)
#define _rep(i,a,b) for(int i=(a);i<=(b);++i)
#define _pre(i,a,b) for(int i=(a);i>=(b);--i)
#define all(x) (x).begin(), (x).end()
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
typedef unsigned long long ULL;
typedef pair<int,int>PII;
const int N=1e6+10,INF=4e18;
double n,p1,p2,v1,v2;
double eps=1e-10;
bool deal(double a)
{
	double t1l=p1/v1;
	double t1r=(n-p1)/v1;
	double t2l=p2/v2;
	double t2r=(n-p2)/v2;
	//左左		
	double s1=-1,s2=-1;
	if(t1l<=a)
	{
		double t1=a-t1l;
		s1=t1*v1;
	}
	if(t2l<=a)
	{
		double t2=a-t2l;
		s2=t2*v2;
	}
	if(s1>=n||s2>=n)return true;
	
	//左右
	s1=-1,s2=-1;
	if(t1l<=a)
	{
		double t1=a-t1l;
		s1=max(t1*v1,t1*v1/2+p1);
	}
	if(t2r<=a)
	{
		double t2=a-t2r;
		s2=max(t2*v2,t2*v2/2+(n-p2));
	}
	if(s1+s2>=n)return true;
	
	//右左
	s1=-1,s2=-1;
	if(t1r<=a)
	{
		double t1=a-t1r;
		s1=t1*v1;
	}
	if(t2l<=a)
	{
		double t2=a-t2l;
		s2=t2*v2;
	}
	if(s1>=n||s2>=n||(s1>0&&s2>0))return true;
	
	
	//右右
	s1=-1,s2=-1;
	if(t1r<=a)
	{
		double t1=a-t1r;
		s1=t1*v1;
	}
	if(t2r<=a)
	{
		double t2=a-t2r;
		s2=t2*v2;
	}
	if(s1>=n||s2>=n)return true;
	return false;
}
bool check(double a)
{
	return deal(a);
}
void solve()
{
//    cin>>n;
	scanf("%Lf",&n);
	scanf("%Lf",&p1);
	scanf("%Lf",&v1);
	scanf("%Lf",&p2);
	scanf("%Lf",&v2);
	double l=0,r=1e9;
	if(p1>p2)
	{
		swap(p1,p2);
		swap(v1,v2);
	}
	while(r-l>eps)
	{
		double mid=(r+l)/2;
		check(mid)?r=mid:l=mid;
	}
	printf("%.10Lf\n",l);
	return ;
}
signed main()
{
	int T=1;
	sf(T);
	while(T--)
		solve();
	return 0;
}

M:

一个类似树形的思想,把所有的可删/不可删的文件映射为下标,然后按照文件路径建树,注意,不同文件夹下的子文件夹名字可能相同,例如

a/b/c和b/b/d并不冲突

所以不是a->b->c这么建树而是a->a/b->a/b/c这样建树

把所有的可以删除的文件,在建树之后就是对应的叶子结点赋权值为0,不可删除的文件对应的叶子节点赋权值为1(这里注意要建立一个虚拟源点并且权值为1,这样假如所有的文件都可以删除的话递归到虚拟源点的时候就会删除,后面会提到)

样例如下

假设某个点的子树(包括自己)权值为0,则向上递归

否则再次找到这个点u的所有儿子,如果儿子的权值为0则res++

此时就能体会出虚拟源点权值为1的好处,假设输入样例为

3 0

a

b

c

那么递归到虚拟源点的时候碰到子树a,b,c就res++三次,答案就为3

代码实现

#include <map>
#include <set>
#include <queue>
#include <deque>
#include <cmath>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <unordered_map>
using namespace std;
#define fi first
#define se second
#define u1 (u<<1)
#define u2 (u<<1|1)
#define pb push_back
#define pp pop_back()
#define int long long
#define laile cout<<"laile"<<endl
#define lowbit(x) ((x)&(-x))
#define double long double
#define sf(x) scanf("%lld",&x)
#define sff(x,y) scanf("%lld %lld",&x,&y)
#define sd(x) scanf("%Lf",&x)
#define sdd(x,y) scanf("%Lf %Lf",&x,&y)
#define _for(i,n) for(int i=0;i<(n);++i)
#define _rep(i,a,b) for(int i=(a);i<=(b);++i)
#define _pre(i,a,b) for(int i=(a);i>=(b);--i)
#define all(x) (x).begin(), (x).end()
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
typedef unsigned long long ULL;
typedef pair<int,int>PII;
const int N=1e6+10,INF=4e18;
int n,m;
map<string,int>mp;
int idxx;
int e[N],ne[N],h[N],w[N],idx;
int sz[N];
map<PII,bool>pan;
void add(int a,int b)
{
	e[idx]=b;
	ne[idx]=h[a];
	h[a]=idx++;
}
string s;
void deal(string s,int c)
{
	string now="";
	int pre=1;
	_rep(i,0,(int)s.size()-1)
	{
		if(s[i]=='/')
		{
			if(!mp.count(now))mp[now]=++idxx;
			int t=mp[now];
			if(!pan.count({pre,t}))add(pre,t);
			pan[{pre,t}]=true;
			pre=t;
//			now="";
		}
		now+=s[i];
	}
	if(!mp.count(now))mp[now]=++idxx;
	int t=mp[now];
	w[t]=c;
	add(pre,t);
	pre=t;
//	now="";
	return;
}
int res;
int dfs(int u,int fa)
{
	sz[u]=w[u];
	for(int i=h[u];~i;i=ne[i])
	{
		int j=e[i];
		if(j==fa)continue;
		sz[u]+=dfs(j,u);
	}
	if(sz[u])
	{
		for(int i=h[u];~i;i=ne[i])
		{
			int j=e[i];
			if(j==fa)continue;
			if(!sz[j])res++;
//			cout<<"j="<<j<<endl;
		}
	}
	return sz[u];
}
void solve()
{
	res=0;
	idxx=1;
	idx=0;
	cin>>n>>m;
	_rep(i,1,n)
	{
		cin>>s;
		deal(s,0);
	}
	_rep(i,1,m)
	{
		cin>>s;
		deal(s,1);
	}
	w[1]=1;
	dfs(1,0);
	_rep(i,0,idxx)h[i]=-1,w[i]=0;
	mp.clear();
	pan.clear();
	cout<<res<<'\n';
	return ;
}
signed main()
{
	IOS;
	memset(h,-1,sizeof(h));
	int T=1;
	cin>>T;
	while(T--)
		solve();
	return 0;
}

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

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

相关文章

C++在Linux实现多线程和多进程的TCP服务器和客户端通信

多进程版本 服务器 #include <arpa/inet.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <sys/wait.h> #include <signal.h> #include <string&…

软件设计师——程序设计语言

目录 低级语言和高级语言 编译程序和解释程序 正规式&#xff0c;词法分析的一个工具 有限自动机 ​编辑 上下文无关法 ​编辑 中后缀表示法 杂题 ​编辑 低级语言和高级语言 编译程序和解释程序 计算机只能理解由0、1序列构成的机器语言&#xff0c;因此高级程序设计…

CAD_Electrical 2022使用记录

一、CAD软件实用调整 1、如何调节窗口背景颜色 例如&#xff1a;将图中白色的背景色调节为黑色。 步骤&#xff1a;在CAD空白区域点击右键 -> 点击选项 -> 在显示中点击颜色(窗口元素) -> 将二维模型空间统一背景的颜色修改成需要的颜色 2、如何调节关标大小 例如&a…

IP纯净度对跨境电商有哪些影响

在全球化贸易的浪潮中&#xff0c;跨境电商凭借其打破地理界限的能力&#xff0c;成为推动国际贸易的重要力量。然而&#xff0c;跨境电商的运营并非没有挑战&#xff0c;其中IP纯净度是影响其成功的关键因素之一。本文将探讨IP纯净度对跨境电商运营的多方面影响&#xff0c;并…

Linux基础---08软件的安装

安装方式优缺点编译安装自由定制&#xff0c;但较为繁琐rmp安装安装简单&#xff0c;但需要自己解决依赖&#xff0c;不支持定制yum安装自动解决rmp依赖&#xff0c;但不支持定制&#xff08;用的更多&#xff09; 下面就具体介绍三大安装方式&#xff1a; 一.编译安装 用Li…

2024/9/15 408“回头看”之应用层小总结(下)

域名系统DNS: 本地域名服务器 本地域名服务器起着代理的作用&#xff0c;会将报文转发到根域名服务器、顶级域名服务器、权限域名服务器。 递归查询&#xff1a; 迭代查询&#xff1a; 文件传送协议FTP: FTP客户和FTP服务器之间使用的是tcp连接。 控制连接使用21端口&…

长业务事务的离线并发问题

事务指代一组操作同时成功或同时失败&#xff0c;事务可分为两类&#xff1a; 系统事务&#xff1a;即关系数据库事务&#xff0c;一次数据库连接中由start transaction或begin开启&#xff0c;commit表示提交&#xff0c;rollback表示回滚&#xff1b;业务事务&#xff1a;完…

海外VS国内:网安上市公司人均创收对比

二级市场分析章节中分析了中国网络网络安全上市公司人均创收63.2万、人均毛利37.6万&#xff0c;人均创利-1.6万。 有网友问了&#xff1a;海外网络安全公司的人均情况如何&#xff1f;那么让我们一起看看吧。 我们统计了在海外上市的28家主要网络安全公司的2023年的人均情况&…

Python互相关统计学 地震学 心理学 数学物理和算法模型及数据科学应用

&#x1f3af;要点 同步时间序列数据地震时频域信息绘制地震噪声干涉图和频谱计算光变曲线和时滞互相关光变曲线并计算峰值和质心图像几何对应关系算法气候相关矩阵图测量麦克风间距离图像相似性量化及显着性统计测试个体同步性量化分析计算绘制有无泊松噪声的光曲线地震幅度和…

通信工程学习:什么是接入网(AN)中的CF核心功能

接入网&#xff08;AN&#xff09;中的CF核心功能 在通信工程中&#xff0c;CF&#xff08;Core Function&#xff09;通常指的是核心功能&#xff0c;它是接入网&#xff08;AN&#xff09;中的一个重要组成部分。CF的主要作用是将用户或业务端口的承载要求与公共传送承载进行…

一键生成中秋国风插画!FLUX中秋专属Lora的使用教程

如何在中秋节期间快速生成富有节日气氛的国风插画吗&#xff1f; 不需要复杂的设计技能&#xff0c;或者手绘功底。只需借助FLUX中秋专属Lora-中秋国风人物插画v1.0_FLUX&#xff0c; 就可以轻松实现一键生成精美插画&#xff0c;特别适合用于宣传海报、包装设计等场景。 这个…

6.接口测试加密接口(Jmeter/工具/函数助手对话框、Beanshell脚本)

一、接口测试加密接口&#xff0c;签名接口 1.加密算法&#xff1a; 可以解密的&#xff1a; 对称式加密&#xff08;私钥加密&#xff09;&#xff1a;AES&#xff0c;DES&#xff0c;Base64 https://www.bejson.com 非对称加密&#xff08;双…

编写程序模版的搭建

1 完整的程序工程有些部分组成 1.1 头文件介绍 头文件嵌套包括的功能 CCS如何找到需要的头文件 1.2 源文件 1.3 库文件 1.4 CMD文件 2 工程模板创建 2.1 获取工程模板基础文件 <

CleanMyMac X 4.15.6正式版 mac直装破解版

你知道 CleanMyMac是什么吗&#xff1f;它的字面意思为“清理我的Mac”&#xff0c;作为软件&#xff0c;那就是一款 Mac清理工具 &#xff0c;Mac OS X 系统下知名系统清理软件&#xff0c;是数以万计的Mac用户的选择。它可以流畅地与系统性能相结合&#xff0c;只需…

dubbo一

Dubbo 分布式系统的演进 SOA面向服务架构 NSA微服务架构 节点与网络 分片和冗余 分布式系统挑战 分布式系统特性与衡量标准 一致性理论 强一致性ACID CAP 弱一致性BASE 一致性算法 dubbo dubbo六大核心功能 API与SPI

【第36章】Spring Cloud之Seata分布式事务

文章目录 前言一、架构图1. 介绍2. 项目结构3. 功能描述 二、用例1. 准备1.1 系统表1.2 业务表1.3 初始化数据 2. 项目搭建2.1 项目结构2.2 主要依赖2.3 主要配置 三、主要业务代码1. 仓储服务1.1 controller1.2 service1.3 dao 2. 订单服务1.1 controller1.2 service1.3 dao 3…

对操作系统(OS)管理和进程的理解

文章目录 从冯诺依曼体系入手来了解计算机硬件部分操作系统操作系统的概念设计操作系统&#xff08;OS&#xff09;的目的对下&#xff08;硬件&#xff09;OS的管理对上如何理解系统调用 进程 在计算机系统中&#xff0c;硬件、操作系统和进程是三个至关重要的概念。它们相互协…

【数据库】MySQL内置函数

本篇分享一些在MySQL中常见的一些内置函数&#xff0c;如日期函数&#xff0c;字符串函数和数学函数&#xff0c;以方便于操作数据库中的数据。 1.日期函数 我们先整体观察一下这些函数再讲解案例 日期函数使用起来都非常就简单 获得年月日&#xff1a; select current_dat…

LocalMamba: Visual State Space Model with Windowed Selective Scan 论文总结

题目&#xff1a;LocalMamba: Visual State Space Model&#xff08;视觉状态空间模型&#xff09; with Windowed Selective Scan&#xff08;窗口化的选择扫描&#xff09; 论文&#xff1a;[2403.09338] LocalMamba: Visual State Space Model with Windowed Selective Scan…

opencv彩色图像转灰度图原理

opencv彩色图像转灰度图原理 在OpenCV中&#xff0c;将彩色图像转换为灰度图像的基本原理是使用颜色空间转换的方法。具体来说&#xff0c;OpenCV提供了cvtColor函数&#xff0c;它可以将图像从一个颜色空间转换到另一个。 对于从BGR颜色空间&#xff08;OpenCV中的默认彩色图…