2022浙江省赛G I M

news2024/11/17 23:48:30

G - Easy Glide

 题意

思路

由于数据范围比较小(1e3),把所有的移动的时间转化为图论上的边权就可以了,再用dijkstra解决,注意如果用的是邻接表存的话要建双向边

代码

#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;
typedef pair<double,double>PDD;
const int N=4e6+10,INF=4e18;
int n,m;
int e[N],ne[N],h[N],idx,v1,v2;
double w[N];
PII q[N];
double dist[N];
bool st[N];
void add(int a,int b,double c)
{
	e[idx]=b;
	ne[idx]=h[a];
	w[idx]=c;
	h[a]=idx++;
}
double getdist(PII a,PII b)
{
	return sqrt((a.fi-b.fi)*(a.fi-b.fi)+(a.se-b.se)*(a.se-b.se));
}
void addv(PII a,PII b,int i,int j)
{
	double dis=getdist(a,b);
	if(!j)add(j,i,dis/v1);
	else
	{
		if(v2*3>=dis)add(j,i,dis/v2);
		else add(j,i,3+(dis-v2*3)/v1);
	}
}
void dijkstra()
{
	priority_queue<pair<double,int>,vector<pair<double,int>>,greater<pair<double,int>>>que;
	_rep(i,0,n+1)dist[i]=INF;
	que.push({0,0});
	dist[0]=0;
	while(que.size())
	{
		auto t=que.top();
		que.pop();
		int u=t.se;
		if(st[u])continue;
		st[u]=true;
		for(int i=h[u];~i;i=ne[i])
		{
			int j=e[i];
			double k=w[i];
//			cout<<dist[]
			if(dist[j]>dist[u]+k)
			{
				dist[j]=dist[u]+k;
				que.push({dist[j],j});
			}
		}
	}
	return ;
}
void solve()
{
	memset(h,-1,sizeof(h));
//	cin>>n;
	sf(n);
	_rep(i,1,n)sff(q[i].fi,q[i].se);
//		cin>>q[i].fi>>q[i].se;
	sff(q[0].fi,q[0].se);
	sff(q[n+1].fi,q[n+1].se);
//	cin>>q[0].fi>>q[0].se>>q[n+1].fi>>q[n+1].se;
//	cin>>v1>>v2;
	sff(v1,v2);
	_rep(i,0,n+1)
		_rep(j,0,i-1)
		{
			addv(q[i],q[j],i,j);
			addv(q[j],q[i],j,i);
		}
	dijkstra();
	printf("%.10Lf",dist[n+1]);
//	cout<<dist[n+1]<<endl;
	return ;
}
signed main()
{
//	IOS;
	int T=1;
//    cin>>T;
	while(T--)
		solve();
	return 0;
}

I - Barbecue

题意

思路

如果此时查询的子字符串是回文,则Budada直接赢,否则这两个人一定会一直取取到最后一个,判断奇偶即可

可以发现abab...这种形式,删一次的话Putata直接输了,这里可以分类讨论一下

如果是偶数的ababab..这种形式的话Putata删一次就输了所以Putata就输了

假如是偶数但是不是ababab..这种形式的话,删到剩最后一个Putata还是输了

奇数没有特判所以删到最后一个Budada就输了

综上所述:如果此时查询的子字符串是回文,则Budada直接赢,否则偶数Budada赢,奇数Putata赢

代码

#include<bits/stdc++.h>
using namespace std;
#define sf(x) scanf("%lld",&x)
#define sff(x,y) scanf("%lld%lld",&x,&y)
#define endl '\n'
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define pf(x) printf("%lld",x)
#define pii pair<int,int> 
#define f first 
#define s second
#define int long long
typedef unsigned long long ull;
const int  N =1e6+10;
const int P = 133331;

ull h[N][3],p[N];
string a,b;
int m,n;
void hx()
{
    p[0]=1;
    for(int i=1;i<=m;i++) 
    {
        p[i]=p[i-1]*P;
        h[i][1] = h[i-1][1]*P+a[i];
        h[i][2] = h[i-1][2]*P+b[i];        
    }
}

ull get(int l,int r)
{
    return h[r][1]-h[l-1][1]*p[r-l+1];
}
ull fget(int l,int r)
{
    return h[r][2]-h[l-1][2]*p[r-l+1];
}
//
//
//


void solve()
{
    cin>>m>>n;
    
    cin>>b;
    a=b;
    reverse(b.begin(),b.end());
    a=" "+a;
    b=" "+b;
    hx();
    while(n--)
    {
        int l,r;
        cin>>l>>r;
        int ll=m-r+1,rr=m-l+1;
        if(get(l,r)==fget(ll,rr)) cout<<"Budada"<<endl;
        else 
        {
            if((r-l)%2)cout<<"Budada"<<endl;
            else cout<<"Putata"<<endl;
        }
    
    }

}
signed main()
{
    IOS;
    int _=1;
    while(_--)
        solve();
    return 0;
}

M - BpbBppbpBB

题意

在1000x1000的图中找'8' 'b''p'形状的数量(大小必须相同)

思路

把所有第一次遇到'.'的位置BFS一遍,然后暴力判断这个'.'所在的连通块是否是满足条件的洞如下:

满足的话就把这个连通块左上角(也就是BFS初始进来的点)坐标加入到待选的数组里

由于一个'8'或者'b''p'尺寸为10*17,那么洞的数量最多1000/10*1000/17=5800个,可以两重循环判断洞与洞的关系

最后加入两个洞所在坐标的哈密顿距离=7就说明这两个洞对应一个8,剩余不满足这个条件的洞对应'b''p'即可

代码

#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;
typedef pair<double,double>PDD;
const int N=1e3+10,INF=4e18;
int n,m,cnt;
char g[N][N];
int now[N][N];
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
bool bfs(int a,int b,int cnt)
{
	queue<PII>q;
	now[a][b]=cnt;
	q.push({a,b});
	int res=1;
	while(q.size())
	{
		auto t=q.front();
		q.pop();
		int xx=t.fi,yy=t.se;
		_rep(i,0,3)
		{
			int x=xx+dx[i],y=yy+dy[i];
			if(x<1||x>n||y<1||y>m||g[x][y]=='#'||now[x][y])continue;
			now[x][y]=cnt;
			res++;
			q.push({x,y});
		}
	}
	if(a+3<=n&&b+2<=m&&b-1>=1&&res==12)
	{
		vector<PII>v;
		v.pb({a,b});
		v.pb({a,b+1});
		v.pb({a+1,b-1});
		v.pb({a+1,b});
		v.pb({a+1,b+1});
		v.pb({a+1,b+2});
		v.pb({a+2,b-1});
		v.pb({a+2,b});
		v.pb({a+2,b+1});
		v.pb({a+2,b+2});
		v.pb({a+3,b});
		v.pb({a+3,b+1});
		for(auto i:v)if(now[i.fi][i.se]!=cnt)return false;
	}
	else return false;
	return true;
}
int getdist(PII a,PII b)
{
	return abs(a.fi-b.fi)+abs(a.se-b.se);
}
void solve()
{
	vector<PII>v;
	cin>>n>>m;
	_rep(i,1,n)
		_rep(j,1,m)
			cin>>g[i][j];
	_rep(i,1,n)
		_rep(j,1,m)
		if(g[i][j]=='.'&&!now[i][j])
			if(bfs(i,j,++cnt))v.pb({i,j});
	int ba=0;
	_rep(i,0,(int)v.size()-1)
	_rep(j,0,i-1)
	if(getdist(v[i],v[j])==7)ba++;
	cout<<ba<<" "<<(int)v.size()-ba*2;
	return;
}
signed main()
{
	IOS;
	int T=1;
//    cin>>T;
	while(T--)
		solve();
	return 0;
}

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

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

相关文章

【Linux】修改用户名用户家目录

0、锁定旧用户登录 如果旧用户olduser正在运行中是无法操作的&#xff0c;需要先禁用用户登录&#xff0c;然后杀掉所有此用户的进程。 1. 使用 usermod 命令禁用用户 这将锁定用户账户&#xff0c;使其无法登录&#xff1a; sudo usermod -L olduser2. 停止用户的进程 如…

Python中的机器学习:从入门到实战

机器学习是人工智能领域的一个重要分支&#xff0c;它通过构建模型来使计算机从数据中学习并做出预测或决策。Python凭借其丰富的库和强大的生态系统&#xff0c;成为了机器学习的首选语言。本文将从基础到实战&#xff0c;详细介绍如何使用Python进行机器学习&#xff0c;涵盖…

论文解读 | ACL'24最佳论文:利用扩散模型破译甲骨文语言

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 点击 阅读原文 观看作者讲解回放&#xff01; 作者简介 管海粟&#xff0c;华中科技大学本科生在读。 主要研究方向为图像生成、图像分割、多模态大模型。获得国家奖学金、校三好学生奖学金、华中科技大学本科特…

开源AI智能名片小程序源码:私域电商构建独特竞争力的新机遇

摘要&#xff1a;本文旨在探讨私域电商如何利用开源AI智能名片小程序源码构建独特竞争力。在强调独特性是通向成功的必要条件的基础上&#xff0c;分析开源AI智能名片小程序源码在私域电商发展独特性方面的作用及相关策略。 一、引言 在竞争激烈的商业环境中&#xff0c;让自己…

西陆家政系统V1.0.1

微信小程序开发的西陆家政服务管理系统小程序 V1.0.1bug修复优化 1.修复首页轮播不能自动轮播问题;2.修复订单详情价格显示问题;3.修复在开放城市模式下,其他城市可以下单问题;4.修复个人二维码跳转小程序路径异常问题;5.修复小程序编辑我的地址选择定位后不刷新问题&#xf…

LeetCode 每周算法 8(栈、堆)

LeetCode 每周算法 8&#xff08;栈、堆&#xff09; 栈算法&#xff1a; class Solution { public: // 判断括号是否有效的函数 bool isValid(string s) { int n s.size(); // 获取字符串s的长度 // 如果字符串长度为奇数&#xff0c;则括号无法有效匹配&#xff0c;直…

利用多模态输入的自我中心运动跟踪与理解框架:EgoLM

随着增强现实(AR)和虚拟现实(VR)技术的发展,对自我中心(第一人称视角)运动的精确跟踪和理解变得越来越重要。传统的单一模态方法在处理复杂场景时存在诸多局限性。为了解决这些问题,研究者们提出了一种基于多模态输入的自我中心运动跟踪与理解框架——EgoLM。本文将详细…

群晖套娃:群晖+飞牛fnOS二合一,群晖nas安装飞牛fnOS系统实录(飞牛fnOS初体验,如何挂载网盘视频,轻松实现影视刮削)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 飞牛fnOS 📒📝 什么是飞牛fnOS?📝 准备工作📝 安装飞牛fnOS📝 影视刮削⚓️ 相关链接 ⚓️📖 介绍 📖 最近有一款很火的国产NAS系统吸引了不少用户的注意。你是否曾想过,将这种新兴系统安装到你的群晖设备上,实…

选读算法导论5.2 指示器随机变量

为了分析包括包括雇佣分析在内的许多算法&#xff0c;我们将使用指示器随机变量&#xff0c;它为概率和期望之间的转换提供了一个便利的方法&#xff0c;给定一个样本空间S和事件A&#xff0c;那么事件A对应的指示器随机变量&#xff1a; Xa 1 如果A发生    0 如果…

EEditor中的redo/uodo机制

本文分析EEditor中的redo/undo机制&#xff0c;并比较与常见的C中的undo/redo机制的区别。 内容 和传统的C中Command设计模式一致&#xff0c;EcommandManager管理命令&#xff0c;同时提供了命令类ECommand。其中EcommandManager中存在两个列表&#xff0c;一个为可撤销命令列…

网页设计进阶:favicon 图标、CSS 隐藏样式与鼠标样式

目录 非 VIP 用户可前往公众号回复“css”进行免费阅读 favicon图标 CSS 隐藏样式 鼠标样式 非 VIP 用户可前往公众号回复“css”进行免费阅读 favicon图标 在网页中引入 favicon 图标时,可采用如下的页面引入方法: <link rel="shortcut icon" hre…

3种解决Docker容器中配置运行环境的方法

1. dockerfile用于通过脚本生成镜像 2.进入docker容器后&#xff0c;配置环境完&#xff0c;导出容器快照为镜像&#xff0c;拷贝到另一个主机&#xff0c;再进行加载&#xff1b; 3.在本地将依赖库等需要的文件按照目录整理好&#xff0c;映射到docker中。 1. dockerfile用于…

衡石分析平台系统管理手册-功能配置之资源管理

资源管理​ 系统管理员可以对系统中的所有资源进行查看、转移所有权、删除操作&#xff1b; 可以查看特定用户持有的资源&#xff0c;从而可用在资源转移/删除后&#xff0c;删除用户、释放系统资源&#xff1b; 在组织用户变动较大时&#xff0c;可以实现资源的整理和回收。…

力扣 最小覆盖子串

最小覆盖子串 https://leetcode.cn/problems/minimum-window-substring/ 题目描述 题目分析f 覆盖子串&#xff1a;首先根据题意&#xff0c;要求目标字符串的元素必须都在子串中出现过&#xff0c;这表明可以是乱序出现。所以在解决问题是我们需要对子串和目标字符串做匹配&a…

408数据结构解析模版

第一题&#xff1a; 解析&#xff1a; 答案选A。 第二题&#xff1a; 解析&#xff1a; 答案选A。 第三题&#xff1a; 解析&#xff1a; 答案选A。 第四题&#xff1a; 解析&#xff1a; 答案选A。 第五题&#xff1a; 解析&#xff1a; 答案选A。 第六题&#xff1a; 解析…

数据结构与算法——Java实现 22.有效的括号

目录 22. 有效的括号 思路 接口 数组实现类 有效的括号 力扣 直到有一天&#xff0c;我不会再问离开的人为什么 —— 24.9.28 22. 有效的括号 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。…

鸿蒙开发(NEXT/API 12)【硬件(传感器开发)】传感器服务

使用场景 Sensor Service Kit&#xff08;传感器服务&#xff09;使应用程序能够从传感器获取原始数据&#xff0c;并提供振感控制能力。 Sensor&#xff08;传感器&#xff09;模块是应用访问底层硬件传感器的一种设备抽象概念。开发者可根据传感器提供的相关接口订阅传感器…

新电脑需要安装杀毒软件吗?

以下是关于新电脑是否需要安装杀毒软件的建议&#xff1a; 如果您经常访问各类网站&#xff0c;下载未知来源的文件&#xff0c;或者使用外部存储设备交换数据&#xff0c;那么安装杀毒软件是有必要的。 操作步骤&#xff1a;选择一款知名的杀毒软件&#xff0c;如 360 杀毒、腾…

KaiOS statusbar 更新代码逻辑

简介 状态栏在system APP,KaiOS上面的代码路径是 gaia/apps/system。 statusbar.js 代码结构 gaia\apps\system\js\statusbar.js 状态栏逻辑 statusbar.js代码结构-1-变量 statusbar.js代码结构-2-detail StatuBar 对象 var StatusBar = {serviceState: function sb_updat…

[spring]SpringBoot拦截器 统一数据返回格式 统一异常处理

文章目录 一. 拦截器1. 什么是拦截器2. 拦截器的使用自定义拦截器注册配置器拦截路径 3. 适配器模式 二. 统一数据返回格式异常处理 三. 统一异常处理 一. 拦截器 1. 什么是拦截器 例如, 图书管理系统, 在访问图书list页面之前, 需要先进行登录, 如果没登录, 就需要进行强制跳…