2020ICPC上海 D - Walker M - Gitignore

embedded/2024/9/20 3:56:33/ 标签: c++, 算法

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.ppmy.cn/embedded/114031.html

相关文章

Nginx 实现七层的负载均衡

一、拓扑结构 [vip: 20.20.20.20] 外网 桥接模式&#xff08;vip&#xff09; 内网 nat模式[LB1 Nginx] [LB2 Nginx]192.168.1.2 192.168.1.3[index] [milis] [videos] [images] [news]1.11 1.21 1.31 1.41 1.511.12 1.22 1.32 1.42 1.5…

L67 【哈工大_操作系统】操作系统历史 学习任务

L6 操作系统历史 线条一 1、上古神机 IBM7094 专注于计算批处理操作系统&#xff08;Batch system&#xff09; 2、OS/360 一台计算机干多种事&#xff0c;多道程序作业之间的 切换和调度 成为核心 &#xff08;多进程结构和进程管理概念萌芽&#xff01;&#xff09; 3…

Minio环境搭建(单机安装包、docker)(一)

前言&#xff1a; 项目中客户不愿意掏钱买oss&#xff0c;无奈只能给他免费大保健来一套。本篇文章只是记录验证可行性&#xff0c;毕竟minio太少文档了&#xff0c;参考着官网来。后面还会再出一套验证集群部署的文章。 一、资料 MinIO官网&#xff1a; MinIO | S3 Compatib…

黑神话悟空mac可以玩吗

黑神话悟空mac上能不能玩对于苹果玩家来说很重要&#xff0c;那么黑神话悟空mac可以玩吗&#xff1f;目前是玩不了了&#xff0c;没有针对ios系统的版本&#xff0c;只能之后在云平台上找找了&#xff0c;大家可以再观望下看看。 黑神话悟空mac可以玩吗 ‌使用CrossOver‌&…

架构师论文备考-论云原生架构及其应用

摘要 2022年3月&#xff0c;我有幸参与了公司的新智慧公交系统的研发工作。该系统基于B/S架构设计&#xff0c;并以多租户SaaS平台化为发展目标&#xff0c;旨在创建一个功能更全面、性能更卓越、稳定性更强、用户体验更佳的公交调度一体化平台。在这一项目中&#xff0c;我主要…

HarmonyOS 实现自定义启动页

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的全栈工程师 欢迎分享 / 收藏 / 赞 / 在看…

Mycat搭建分库分表

分库分表解决的问题 单表数据量过大带来的性能和存储容量的限制的问题&#xff1a; 索引效率下降读写瓶颈存储容量限制事务性能问题分库分表架构 再搭建一对主从复制节点&#xff0c;3307主节点&#xff0c;3309从节点配置数据源 dw1 , dr1,创建集群c1创建逻辑库 CREATE DATAB…

KL散度(Kullback-Leibler)

文章目录 1. KL 散度的符号表示2. "||"符号的含义3. KL 散度的定义4. 为什么使用"||"符号5. 直观理解6. 应用中的理解7. 举例说明8. 补充说明 &#x1f343;作者介绍&#xff1a;双非本科大四网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于…

k8s dashboard token 生成/获取

创建示例用户 在本指南中&#xff0c;我们将了解如何使用 Kubernetes 的服务帐户机制创建新用户、授予该用户管理员权限并使用与该用户绑定的承载令牌登录仪表板。 对于以下每个和的代码片段ServiceAccount&#xff0c;ClusterRoleBinding您都应该将它们复制到新的清单文件(如)…

go语言的基本语法

学了go语言但是一直没整理。。。那怎么证明我学了&#xff1f;如果学了之后忘了怎么复习&#xff1f;遂诞生这几篇&#xff0c;当作Linux中间的小插曲 整理一下go语言的基本语法&#xff1a; package mainimport ("bufio""fmt""os" ) 在使用对…

Vue2源码解读

vue源码_哔哩哔哩_bilibili 1.Vue源码路径目录解读 Vue2源码的路径目录被设计得非常清晰&#xff0c;每个文件夹都承担着特定的职责和功能。以下是这些主要文件夹&#xff08;compiler、core、platform、server、sfc、shared&#xff09;的详细解读&#xff1a; 1. compiler …

Redis面试---缓存问题

一、Redis和MySQL数据一致性解决方案 (一)借助lua脚本 Redis命令是单线程,不会存在数据并发安全问题,如果要保证多条命令并发执行的原子性,可以将多个Redis命令存放在lua脚本中,然后再统一执行。 在数据一致性问题方面,将Redis伪装成MySQL的slave,按照MySQL的主从交互…

二十种编程语言庆祝中秋节

二十种编程语言庆祝中秋节 文章目录 二十种编程语言庆祝中秋节中秋快乐&#xff01;家人们 &#x1f973;一 Python二 C三 C四 Java五 C#六 Perl七 Go八 Asp九 PHP十 JavaScript十一 JavaScript HTML十二 Visual Basic十三 早期 VB十四 Visual C十五 Delphi十六 Shell十七 Cobo…

Vue.js与Flask/Django后端配合详细讲解

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/cat…

36.贪心算法3

1.坏了的计算器&#xff08;medium&#xff09; . - 力扣&#xff08;LeetCode&#xff09; 题目解析 算法原理 代码 class Solution {public int brokenCalc(int startValue, int target) {// 正难则反 贪⼼int ret 0;while (target > startValue) {if (target % 2 0…

EP19 各个页面之间的跳转

文件路径&#xff1a; E:/homework/uniappv3tswallpaper/pages/index/index.vue 添加了几个 navigator 。 <template><view class"homeLayout pageBg"><custom-nav-bar title"推荐"></custom-nav-bar><view class"banne…

windows使用tcpdump.exe工具进行抓包教程

windows主机安装一些抓包工具可能有些不方便&#xff0c;这里有一个tcpdump.exe工具直接免安装&#xff0c;可以直接使用进行抓包。&#xff08;工具下载见 附件&#xff09; tcpdump.exe使用教程 如下&#xff1a; 1&#xff1a;tcpdump -D 可查看网络适配器(注意前面的编号)…

OpenCV结构分析与形状描述符(23)确定一个点是否位于多边形内的函数pointPolygonTest()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 进行点在轮廓内的测试。 该函数确定点是在轮廓内、轮廓外&#xff0c;还是位于一条边上&#xff08;或与顶点重合&#xff09;。它返回正值&…

C++ 条件变量:wait、wait_for、wait_until

前言 在C中&#xff0c;条件变量&#xff08;std::condition_variable&#xff09;是用来在多个线程之间同步执行流的一种机制。它们通常与互斥锁&#xff08;如std::mutex&#xff09;一起使用&#xff0c;以在特定条件满足时唤醒一个或多个线程。条件变量有三种使线程阻塞并…

机器人自主导航从零开始第四步———Rviz、Gazebo、Meshlab的安装

本文参考资料&#xff1a; rviz - ROS 维基 Gazebo : Tutorial : Ubuntu (gazebosim.org) 零. 什么是Rviz和Gazebo&#xff1a; Rviz是一个三维可视化工具&#xff0c;它利用已有的数据将数据可视化&#xff0c;并提供了可以显示图像、模型、表格、路径等信息的插件&#x…