Toyota Programming Contest 2024#4(AtCoder Beginner Contest 348)(A~D)

A - Penalty Kick

i,1~N。如果 i 是 3 的倍数输出x,否则输出o

#include <bits/stdc++.h>
//#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define debug(a) cout<<#a<<"="<<a<<endl
#define all(x) x.begin(),x.end()
#define EX exit(0)
#define fr first
#define se second
//#define endl '\n'
using namespace std;
using ll=long long;void solve(){int n;cin>>n;per(i,1,n){if(i%3==0){cout<<"x";}else cout<<"o";}
}signed main(){ios::sync_with_stdio(false),cin.tie(nullptr);int t=1;while(t--)solve();return 0;
}

B - Farthest Point

给你 N 个点,问你 1~N 每个点,各自的最远点是哪个,两点距离计算公式如下图所示

#include <bits/stdc++.h>
//#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define debug(a) cout<<#a<<"="<<a<<endl
#define all(x) x.begin(),x.end()
#define EX exit(0)
#define fr first
#define se second
//#define endl '\n'
using namespace std;
using ll=long long;void solve(){int n;cin>>n;int x[n+1],y[n+1];per(i,1,n){cin>>x[i]>>y[i];}per(i,1,n){int ansidx;bool flag=true;double dis;per(j,1,n){if(j!=i){if(flag){flag=false;ansidx=j;}else{double res=sqrt(pow(x[i]-x[j],2)+pow(y[i]-y[j],2));if(res>sqrt(pow(x[i]-x[ansidx],2)+pow(y[i]-y[ansidx],2))){ansidx=j;}}}}cout<<ansidx<<endl;}
}signed main(){ios::sync_with_stdio(false),cin.tie(nullptr);int t=1;while(t--)solve();return 0;
}

C - Colorful Beans

输入 N 种豆子,每种豆子 美味度Ai,颜色Ci。

问:每个颜色的最小值x1,x2,x3,x4。max{x1,x2,x3,x4}是多少

#include <bits/stdc++.h>
//#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define debug(a) cout<<#a<<"="<<a<<endl
#define all(x) x.begin(),x.end()
#define EX exit(0)
#define fr first
#define se second
//#define endl '\n'
using namespace std;
using ll=long long;void solve(){int n;cin>>n;int ans=0;map<int,int>f;int a[n+1],c[n+1];per(i,1,n){cin>>a[i]>>c[i];if(!f[c[i]])f[c[i]]=a[i];else if(a[i]<f[c[i]])f[c[i]]=a[i];//同颜色里面取最小值}for(auto [color,val]:f){ans=max(ans,val);}cout<<ans;
}signed main(){ios::sync_with_stdio(false),cin.tie(nullptr);int t=1;while(t--)solve();return 0;
}

D - Medicines on Grid

从S点出发,是否能走到T点,每走一步花费 1 点能量,如果能量为 0 则不能走。(刚开始能量为0)

样例前面的 4*4 给的是网格图。

后面的 4 行是网格上的能量点:1,1,3就是 点{1,1}上有能量 3。

当你在能量点上面的时候,你可以将目前有的能量 变成 当前能量点的数量。(注意不是增多也不是减少,是变成那个值)并且只能使用一次。

如果说暴力搜索我们考虑一种情况。

P是图上的能量点,必须要拿到这个能量点,才能到达终点T。

所以暴力搜索不行,如果历史点只访问一次,不会超时,但是答案错了。

如果每个点都走,那时间复杂度肯定爆了。

通过上面的分析可以发现,终点一定来自于能量点

这样我们可以去找,能量点之间是否可以相互到达,以及能量点是否可以到达终点。

如果某个能量点可以被走到,并且这个能量点可以到达终点。那么就有解。

然后就是惊天大模拟:

起点是能量点的话,进队列,然后遍历剩下没被走过的能量点,看是否能被走到,能就加入队列,顺便判断一下是否能到终点即可。

BFS一次的复杂度是H*W=4e4(BFS求能量点到其他点的最短路)

而且题目中能量点最多只有300个

从每个能量点出发BFS一次,一共3e2*4e4≈1e7(刚好通过题目)

代码仅供参考,本蒟蒻写的太多了,可读性很差

#include <bits/stdc++.h>
//#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define debug(a) cout<<#a<<"="<<a<<endl
#define all(x) x.begin(),x.end()
#define EX exit(0)
#define fr first
#define se second
//#define endl '\n'
using namespace std;
using ll=long long;void solve(){int h,w;cin>>h>>w;string s[h+1];per(i,1,h){cin>>s[i];s[i]="0"+s[i];}struct Node{int x,y,val;}S,T;per(i,1,h){per(j,1,w){if(s[i][j]=='S'){S={i,j,0};}if(s[i][j]=='T'){T={i,j,0};}}}int n;cin>>n;//. 代表格子为空//# 代表障碍//S 起点//T 目标点//消耗 1 点能量水平或者垂直移动到相邻的空的格子//能量为0不能移动//(Ri,Ci)上有药,可以将能量设置成Ei,只能使用一次//BFS一次复杂度4e4   //最多300个补给点int r[n+1],c[n+1],e[n+1],toT[n+1],toS[n+1];map<array<int,2>,int>f;map<pair<int,int>,int>g;map<int,pair<int,int>>p;per(i,1,n){cin>>r[i]>>c[i]>>e[i];f[{r[i],c[i]}]=e[i];g[{r[i],c[i]}]=i;//补给点标号}int dis[305][305];//补给点到补给点的距离per(i,1,300){per(j,1,300){dis[i][j]=INT_MAX>>1;}}per(i,1,n)toS[i]=toT[i]=INT_MAX>>1;per(i,1,n){//toS,补给点去S的距离,toS去T的距离Node now={r[i],c[i],0};queue<Node>q;q.push(now);bool vis[h+1][w+1];per(i,1,h){per(j,1,w){vis[i][j]=false;}}int dx[4]={0,0,1,-1};int dy[4]={1,-1,0,0};while(q.size()){//BFSNode now=q.front();q.pop();if(vis[now.x][now.y])continue;if(f[{now.x,now.y}]){dis[i][g[{now.x,now.y}]]=min(dis[i][g[{now.x,now.y}]],now.val);dis[g[{now.x,now.y}]][i]=min(dis[g[{now.x,now.y}]][i],now.val);}if(now.x==S.x and now.y==S.y){toS[i]=min(toS[i],now.val);}if(now.x==T.x and now.y==T.y){toT[i]=min(toT[i],now.val);}vis[now.x][now.y]=true;per(i,0,3){Node nxt={now.x+dx[i],now.y+dy[i],now.val+1};if(nxt.x>=1 and nxt.x<=h and nxt.y>=1 and nxt.y<=w){if(s[nxt.x][nxt.y]!='#'){q.push(nxt);}}}}}if(!f[{S.x,S.y}]){//起始点没有能量cout<<"No";}else{//从补给点S开始能到达哪些点queue<int>q;bool vis[n+1];per(i,1,n)vis[i]=false;per(i,1,n){if(r[i]==S.x and c[i]==S.y){//起点,能量为e[i]q.push(i);vis[i]=true;}}while(q.size()){int now=q.front();q.pop();per(i,1,n){if(!vis[i]){if(e[now]>=dis[now][i]){vis[i]=true;q.push(i);}}}}per(i,1,n){if(vis[i] and e[i]>=toT[i]){cout<<"Yes";return;}}cout<<"No";}
}signed main(){ios::sync_with_stdio(false),cin.tie(nullptr);int t=1;while(t--)solve();return 0;
}

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

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

相关文章

你离涨薪只差一步,深入Linux内核架构与底层原理,让你薪资疯长

第一章linux总览 第二章Linux内核架构 第三章内核数据结构 第四章Linux系统的启动 第五章进程(重点) 第六章内存管理(重点) 第七章安全 第八章网络(重点) 自我介绍一下&#xff0c;小编13年上海交大毕业&#xff0c;曾经在小公司待过&#xff0c;也去过华为、OPPO等大厂&…

【每日刷题】Day3

【每日刷题】Day3 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; 目录 1. 69. x 的平方根 - 力扣&#xff08;LeetCode&#xff09; 2. 70. 爬楼梯 - 力扣&#xff08;LeetCode&#xff09; 3. 118. 杨辉三…

苹果终止电车项目后大裁员,押注家用机器人,这会是Next Big Thing吗?

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站https://ai.hzytsoft.cn/ 更多资源欢迎关注 新的出路&#xff0c;苹果能让我们耳目一新吗&#xff1f; 苹果公司压力山大&#xff0c;何以…

关于Liunx下的进程概念

目录 基本概念 关于进程的描述 --- PCB task_struct-PCB的一种 task_ struct内容分类 如何查看进程 通过系统调用获取进程标识符 基本概念 书本概念&#xff1a;程序的一个执行实例&#xff0c;正在执行的程序等 内核观点&#xff1a;担当分配系统资源&#x…

【最新可用】Claude国内镜像,可上传图片,可用Claude3全系模型(包括Pro版本的Opus)!亲测比GPT好用!

亲测可用&#xff0c;镜像地址&#xff1a;Claude 3 镜像 使用方法 访问镜像&#xff1a;Claude 3 镜像 2. 点击设置&#xff0c;配置授权码&#xff0c;关闭设置。这里免费赠送一个体验版的授权码 sk-SZcJyvx3RXRID624E2D3795578Df44C7Af03F2909a8f5eA0 即可发起对话啦&…

Python3 Ubuntu

一、安装中文输入法 1.sudo apt install ibus-sunpinyin 2.点击右上角输入法&#xff0c;然后点击加号&#xff0c;输入yin添加进来&#xff0c;最后选中输入法即可 二、安装截屏软件 1.sudo apt install gnome-screenshot 三、安装opencv-python 1.pip3 install --upgrade…

从零开始搭建后端信息管理系统(新手小白比如)

如果你是新手小白&#xff0c;首先我们要进行一些准备工作&#xff0c;安装一些基础软件&#xff0c; 备注一下&#xff1a;这里安装的vue环境的后台管理系统&#xff0c;不同的后台管理系统&#xff0c;需要安装不同的插件 准备工作&#xff1a; 安装 Visual Studio Code …

深入浅出 -- 系统架构之分布式系统底层的一致性

在分布式领域里&#xff0c;一致性成为了炙手可热的名词&#xff0c;缓存、数据库、消息中间件、文件系统、业务系统……&#xff0c;各类分布式场景中都有它的身影&#xff0c;因此&#xff0c;想要更好的理解分布式系统&#xff0c;必须要理解“一致性”这个概念。 其实关于…

元宇宙虚拟空间的场景渲染(五)

前言 该文章主要讲元宇宙虚拟空间的场景渲染&#xff0c;基本核心技术点&#xff0c;不多说&#xff0c;直接引入正题。 场景渲染 下面第二个图中的代码是一个循环渲染逻辑&#xff0c;首先getDelta 获取2次时间的时间间隔&#xff0c;requestAnimationFrame请求我们的一个动…

ICLR 2024 | 联邦学习后门攻击的模型关键层

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站https://ai.hzytsoft.cn/ 更多资源欢迎关注 联邦学习使多个参与方可以在数据隐私得到保护的情况下训练机器学习模型。但是由于服务器无法…

感染了后缀为.jayy勒索病毒如何应对?数据能够恢复吗?

导言&#xff1a; 在当今数字化的世界中&#xff0c;网络安全已经成为了每个人都需要关注的重要议题。而勒索病毒作为网络安全领域中的一大威胁&#xff0c;不断地演变和升级&#xff0c;给个人和组织带来了严重的损失和困扰。近期&#xff0c;一种名为.jayy的勒索病毒引起了广…

docker笔记(一):安装、常用命令

一、docker概述 1.1docker为什么会出现 各种环境配置十分繁琐&#xff0c;每一个机器都需要配置环境&#xff0c;难免出现各种问题。 发布一个项目jar需要配置&#xff08;MySQL、redis、jdk、…&#xff09;&#xff0c;项目不能都带上环境安装打包&#xff1a; 传统&…