嵊州普及Day1T2
题意:走迷宫。求走到a[n][n]需要多久。
考场上想的dfs,听老师说最多50分。代码懒得码了,知道是走迷宫就好。
正解:bfs,时间复杂度O(n)。
见代码:
#include<iostream>
using namespace std;
int n,head=,tail=,a[][],h[],l[],t[];
int a1[]={,-,,,},a2[]={,,,-,};
int c1[]={,-,-,,},c2[]={,-,,-,};
int flag[][];
char s;
int main(){
cin>>n;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
cin>>s;
a[i][j]=int(s)-int('A')+;
if(a[i][j]==)
flag[i][j]=0x3f3f3f3f;
}
flag[][]=;
flag[][n]=;
flag[n][]=;
h[]=;
h[]=;
h[]=n;
l[]=;
l[]=n;
l[]=;
while(head!=tail)
{
head++;
int x=h[head],y=l[head];
if(a[x][y]==)
{
for(int i=;i<=;i++)
{
if(x+a1[i]>&&x+a1[i]<=n&&y+a2[i]>&&y+a2[i]<=n)
{
if(flag[x+a1[i]][y+a2[i]]==||flag[x+a1[i]][y+a2[i]]>flag[x][y]+)
tail++;
h[tail]=x+a1[i];
l[tail]=y+a2[i];
flag[x+a1[i]][y+a2[i]]=flag[x][y]+;
}
}
}
if(a[x][y]==)
{
for(int i=;i<=;i++)
{
if(x+a1[i]*>&&x+a1[i]*<=n&&y+a2[i]*>&&y+a2[i]*<=n)
{
if(flag[x+a1[i]*][y+a2[i]*]==||flag[x+a1[i]*][y+a2[i]*]>flag[x][y]+)
tail++;
h[tail]=x+a1[i]*;
l[tail]=y+a2[i]*;
flag[x+a1[i]*][y+a2[i]*]=flag[x][y]+;
}
}
}
if(a[x][y]==)
{
for(int i=;i<=;i++)
{
if(x+c1[i]>&&x+c1[i]<=n&&y+c2[i]>&&y+c2[i]<=n)
{
if(flag[x+c1[i]][y+c2[i]]==||flag[x+c1[i]][y+c2[i]]>flag[x][y]+)
tail++;
h[tail]=x+c1[i];
l[tail]=y+c2[i];
flag[x+c1[i]][y+c2[i]]=flag[x][y]+;
}
}
}
}
if(a[n][n]==)
cout<<"GO to find Marx";
else
cout<<a[n][n];
return ;
}
总而言之,相对简单的普及题。
好题哉!!!
嵊州普及Day1T2的更多相关文章
- 嵊州普及Day6T3
题意:n个点,对于q个询问,有t秒及一个矩形的范围.在此矩形内的数每秒加1,若等于c,则下一秒变为0. 思路:t可能很大,%c+1就可以了.然后一个一个加起来就可以了. 见代码: #include&l ...
- 嵊州普及Day6T1
题意:有一个矩形,由正负整数构成.一个位子的魅力值为相邻的格子,若与邻格同号则减去绝对值,若异号则加上绝对值. 思路:一个格子一个格子计算即可,没什么好说的. 见代码: #include<ios ...
- 嵊州普及Day5T4
题意:两个1,每次可将一个*k,一个*K2,n个问题,问能否达成x,y? 思路:只有将x,y相乘为3次方时,才可能.并且相乘的三次方一定要是x,y的因子. 下面证明:3次方易证,因为对每个k,都会乘三 ...
- 嵊州普及Day5T2
题意:将(w,h)的纸条折成(W,H),最少需几步. 思路:横竖互不干扰,然后最多可折int型一半,拿个函数判断两次比较即可,然后折不了的条件是需要的矩形大于给的矩形. 见代码: #include&l ...
- 嵊州普及Day5T1
题意:有n个商店,自家商店的定价不可高于任何一家商店定价,求自家商店最高定价. 思路:拿个变量打擂台即可,不用解释太多. 见代码: #include<iostream> #include& ...
- 嵊州普及Day4T2
题意:有一个单行走廊,每回合第ai个展柜会冒出来一只鬼,右边尽头有一个人间大炮和向最左传送门(费用均1金币),你需要每回合将所有鬼交换展柜,全部至最右,问若从一到n所有回合结束是需多少金币可射死所有鬼 ...
- 嵊州普及Day4T1
题意:从n个数中选出k个数,使他们任意两数之差都等于m. 思路:任意差值都等于m,不就等价于k个数模m余数相同吗? 然后桶排储蓄一下各数余数即可. 见代码: #include<iostream& ...
- 嵊州普及Day4T4
题意:求最长上升序列长度和方案数. 思路:经典DP,不需什么别的东西,加一个数组储蓄程序数即可,原题300000可能N2会有问题,但问题不大. 见代码: #include<iostream> ...
- 嵊州普及Day3T2
题意:对于n数列的全排列,有多少种可能,是每项前缀和不能整除3.输出可能性%1000000000037. 思路:全部模三,剩余1.2.0,1.2可这样排:1.1.2.1.2.1.2.……2或2.2.1 ...
随机推荐
- JAVA高级编程数据源datasource
原文链接 数据源 通过jdbc连接数据库,多建立几条连接放在数据源里面.可以设置数据源的最大连接数,同时活跃的连接数,最少空闲的连接数,能够同时接收处理的连接数等等. dbcp数据源 需要的jar包: ...
- kali apt update 错误——下列签名无效: EXPKEYSIG ED444FF07D8D0BF6 Kali Linux Repository
这是因为key过期了 wget -q -O - https://archive.kali.org/archive-key.asc | apt-key add apt update
- cin和cout输⼊输出
写再最前面:摘录于柳神的笔记: 就如同 scanf 和 printf 在 stdio.h 头⽂件中⼀样, cin 和 cout 在头⽂件 iostream ⾥⾯,看名字就知 道, io 是输⼊输出 ...
- C++打开文件夹
https://bbs.csdn.net/topics/392055617?page=1 见2楼 system("start \"\" \"文件夹路径\&q ...
- 获取Webshell方法总结
一.CMS获取Webshell方法 搜索CMS网站程序名称 eg:phpcms拿webshell.wordpress后台拿webshell 二.非CMS获取Webshell方法 2.1数据库备份获取W ...
- JSON传输图片帮助类
JSON传输图片帮助类 2014-05-27 16:11:22| 分类: Java | 标签:解决方案 java json |举报|字号 订阅 原理:将图片转换为字节流,再将字节流用 ...
- python 网络爬虫(三)
一.网站地图爬虫 在一个简单的爬虫中,我们将使用实例网站 robots.txt 文件中发现的网站地图来下载所有网站,为了解析网站地图,我们将会使用一个简单的正则表达式,从<loc>标签中提 ...
- 带你了解后渗透工具Koadic
前言: 在朋友的博客上看到推荐的一款工具Koadic,我接触了以后发现很不错这款工具的强大之处我觉得就是拿到shell后的各种模块功能,我就自己写出来发给大家看看吧. 首先把项目克隆到本地: 项目地址 ...
- Java的equals方法实现及其细节
判断两个对象是否等价,是OOP编程中常见的需求(下面围绕Java来进行阐述). 考虑这样几种情况:通过某个特征值来判断两个对象是否“等价”,当这两个对象等价时,判断结果为true,否则结果为false ...
- Linux centosVMware vim 编辑模式、vim命令模式、vim实践
一.编辑模式.命令模式 在一般模式下输入:或/可进入命令模式.在该模式下可进行走索某个字符或字符串,也可保存.替换.退出.显示行号等. /word:在光标之后查找一个字符串word,按n向后继续搜索 ...