Atcoder ABC339 A-D题解

news/2024/2/21 10:13:45

比赛链接:ABC339

Problem A:

简单题。但是相比于之前的A题来说还是变难了。直接上代码:

#include <bits/stdc++.h>
using namespace std;
int main(){string str;cin>>str;int pos=-1;for(int i=1;i<str.size();i++){if(str[i]=='.')pos=i;}cout<<str.substr(pos+1)<<endl;return 0;
}

Problem B:

纯纯的模拟题。

#include <bits/stdc++.h>
using namespace std;
const int dx[4]={-1,0,1,0};
const int dy[4]={0,1,0,-1};
int main(){int n,m,k;cin>>n>>m>>k;vector<vector<char>> grid(n,vector<char>(m,'.'));int x=0,y=0,dir=0;while(k--){if(grid[x][y]=='.'){grid[x][y]='#';dir=(dir+1)%4;x+=dx[dir];y+=dy[dir];}else{grid[x][y]='.';dir=(dir+3)%4;x+=dx[dir];y+=dy[dir];}x+=n;y+=m;x%=n;y%=m;}for(int i=0;i<n;i++){for(int j=0;j<m;j++)cout<<grid[i][j];}return 0;
}

Problem C:

贪心。我们先假设初始有0人,找到公交车每时每刻人数的最小值即记为mn。如果mn<0,则这个时刻公交车上有mn人,因为是负数了,所以初始应该至少有mn人,才能导致现在不为负数个人;否则初始公交车上可以有0人。代码很简单。

#include <bits/stdc++.h>
using namespace std;
int main(){long long n,a,b=0,mn=0;cin>>n;for(int i=0;i<n;i++){cin>>a;b+=a;min=min(mn,b);}cout<<b-min<<endl;return 0;
}

记得开long long哦。

Problem D:

思维难度不大,但是很难写。其实就是简单地广搜,让两个人一起动就行了。

#include <bits/stdc++.h>
using namespace std;
const int dx[5]={0,1,-1,0,0};
const int dy[5]={0,0,0,1,-1};
int que[maxn*maxn*maxn*maxn][5];
bool vis[maxn][maxn][maxn][maxn];
char grid[maxn][maxn];
int main(){int n;cin>>n;for(int i=1;i<=n;i++){scanf("%s",grid[i]+1);for(int j=1;j<=n;j++){if(grid[i][j]=='P'){if(!que[1][1]){//遇到玩家 que[1][1]=i;//行 que[1][2]=j;//列}else{que[1][3]=i;que[1][4]=j;}}}}int head=0,tail=1;while(head<tail){//bfshead++;if(que[head][1]==que[head][3] && que[head][2]==que[head][4]){cout<<que[head][0];return 0;}for(int i=1;i<=4;i++){int x1=que[head][1]+dx[i];int x2=que[head][3]+dx[i];int y1=que[head][2]+dy[i];int y2=que[head][4]+dy[i];if(x1<1 || x1>n || y1<1 || y1>n || grid[x1][y1]=='#'){x1-=dx[i];y1-=dy[i];}	if(x2<1 || x2>n || y2<1 || y2>n || grid[x2][y2]=='#'){x2-=dx[i];y2-=dy[i];}if(vis[x1][y1][x2][y2])continue;que[++tail][1]=x1;que[tail][2]=y1;que[tail][3]=x2;que[tail][4]=y2;que[tail][0]=que[head][0]+1;vis[x1][y1][x2][y2]=true;}}cout<<-1<<endl;return 0;
}

由于数据很小,所以即使这样也不会MLE。

E题是线段树,我还不大会,就先放着吧。

大家想看什么可以在评论区留言。

友情提醒:本期的全部代码都有问题,请不要无脑Ctrl C+Ctrl V


https://www.xjx100.cn/news/3271430.html

相关文章

fast.ai 深度学习笔记(三)

深度学习 2&#xff1a;第 1 部分第 6 课 原文&#xff1a;medium.com/hiromi_suenaga/deep-learning-2-part-1-lesson-6-de70d626976c 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 来自 fast.ai 课程的个人笔记。随着我继续复习课程以“真正”理解它&#xff0c;这…

2013-2022年上市公司迪博内部控制指数、内部控制分项指数数据

2013-2022年上市公司迪博内部控制指数、分项指数数据 1、时间&#xff1a;2013-2022年 2、范围&#xff1a;上市公司 3、指标&#xff1a;证券代码、证券简称、辖区、证监会行业、申万行业、内部控制指数、战略层级指数、经营层级指数、报告可靠指数、合法合规指数、资产安全…

【国产MCU】-CH32V307-基本定时器(BCTM)

基本定时器(BCTM) 文章目录 基本定时器(BCTM)1、基本定时器(BCTM)介绍2、基本定时器驱动API介绍3、基本定时器使用实例CH32V307的基本定时器模块包含一个16 位可自动重装的定时器(TIM6和TIM7),用于计数和在更新新事件产生中断或DMA 请求。 本文将详细介绍如何使用CH32…

Leetcode 718 最长重复子数组

题意理解&#xff1a; 给两个整数数组 nums1 和 nums2 &#xff0c;返回 两个数组中 公共的 、长度最长的子数组的长度 。 如&#xff1a; nums1 [1,2,3,2,1], nums2 [3,2,1,4,7] 则最长重复子序列为&#xff1a; 321 长度为3 这里采用动态规划解决这个问题。最长公共子序…

使用word2vec+tensorflow自然语言处理NLP

目录 介绍&#xff1a; 搭建上下文或预测目标词来学习词向量 建模1&#xff1a; 建模2&#xff1a; 预测&#xff1a; 介绍&#xff1a; Word2Vec是一种用于将文本转换为向量表示的技术。它是由谷歌团队于2013年提出的一种神经网络模型。Word2Vec可以将单词表示为高维空间…

ctfshow-php特性(web102-web115)

目录 web102 web103 web104 web105 web106 web107 web108 web109 web110 web111 web112 web113 web114 web115 实践是检验真理的 要多多尝试 web102 <?php highlight_file(__FILE__); $v1$_POST[V1]; $v2$_GET[v2]; $v3$_GET[v3]; $v4is_numeric($v2)and is…

MATLAB Coder从入门到放弃

一、MATLAB Coder入门 1 MATLAB Coder是什么 从 MATLAB 代码生成 C 和 C 代码 MATLAB Coder™ 可从 MATLAB 代码生成适用于各种硬件平台&#xff08;从桌面计算机系统到嵌入式硬件&#xff09;的 C 和 C 代码。它支持大多数 MATLAB 语言和广泛的工具箱。您可以将生成的代码作…

Android 移动应用开发 创建第一个Android项目

文章目录 一、创建第一个Android项目1.1 准备好Android Studio1.2 运行程序1.3 程序结构是什么app下的结构res - 子目录&#xff08;所有图片、布局、字AndroidManifest.xml 有四大组件&#xff0c;程序添加权限声明 Project下的结构 二、开发android时&#xff0c;部分库下载异…