2014 WAP校园招聘笔试题
2014 WAP校园招聘笔试题
Problem's Link: http://www.doc88.com/p-6751117015483.html
WAP公司笔试题
We are planning an orienteering game.
The aim of this game is to arrive at the goal (G) from the start (S) with the shortest distance.
However, the players have to pass all the checkpoints (@) on the map.
An orienteering map is to be given in the following format.
########
#@....G#
##.##@##
#..@..S#
#@.....#
########
In this problem, an orienteering map is to be given.
Calculate the minimum distance from the start to the goal with passing all the checkpoints.
Specification
* A map consists of 5 characters as following.
You can assume that the map does not contain any invalid characters and
the map has exactly one start symbol 'S' and exactly one goal symbol 'G'.
* 'S' means the orienteering start.
* 'G' means the orienteering goal.
* '@' means an orienteering checkpoint.
* '.' means an opened-block that players can pass.
* '#' means a closed-block that players cannot pass.
* It is allowed to move only by one step vertically or horizontally (up, down, left, or right) to the
next block.
Other types of movements, such as moving diagonally (left up, right up, left down and right down)
and skipping one or more blocks, are NOT permitted.
* You MUST NOT get out of the map.
* Distance is to be defined as the number of movements to the different blocks.
* You CAN pass opened-blocks, checkpoints, the start, and the goal more than once if necessary.
* You can assume that parameters satisfy following conditions.
* 1 <= width <= 100
* 1 <= height <= 100
* The maximum number of checkpoints is 18.
几个样例:
<Input>
5 4
#####
#...#
#S#G#
#####
<Output>
4
<Input>
5 5
#####
#.@@#
#S###
#..G#
#####
<Output>
9
<Input>
5 5
#####
#S..#
##G##
#..@#
#####
<Output>
6
Mean:
M
analyse:
A
Time complexity: O(n)
Source code:
/*
* this code is made by crazyacking
* Verdict: Accepted
* Submission Date: 2015-05-21-23.40
* Time: 0MS
* Memory: 137KB
*/
#include <queue>
#include <cstdio>
#include <set>
#include <string>
#include <stack>
#include <cmath>
#include <climits>
#include <map>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#define LL long long
#define ULL unsigned long long
using namespace std; const int maxn = 1e2 + ;
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define pb push_back
std::vector<int>path;
const int INF = << ;
struct Point
{
int x, y;
bool operator < ( const Point &a )const
{
return x < a.x || ( x == a.x ) && y < a.y;
}
};
std::vector<Point>P;
char mat[maxn][maxn];
int vis[maxn][maxn];
int w, h, s, e;
int d[ << ][];
int dx[] = { -, , , };
int dy[] = {, -, , };
int dist[][];
int main() {
ios_base::sync_with_stdio( false );
cin.tie( );
while ( cin >> w >> h ) {
map<Point, int>id;
P.clear();
path.clear();
memset( d, , sizeof d );
memset( dist, , sizeof dist );
for ( int i = ; i < h; i++ ) {
scanf( "%s", mat[i] );
for ( int j = ; mat[i][j]; ++j ) {
char &c = mat[i][j];
if ( c == 'S' || c == 'G' || c == '@' ) {
P.pb( ( Point ) {i, j} );
int sz = P.size();
id[P[sz - ]] = sz;
if ( c == 'S' ) { s = sz - ; }
else if ( c == 'G' ) { e = sz - ; }
path.pb( sz - );
}
}
}
for ( int i = ; i < path.size(); i++ ) {
Point now = P[path[i]];
int x = path[i];
//out<<"x "<<x<<endl;
dist[x][x] = ;
memset( vis, , sizeof vis );
vis[now.x][now.y] = ;
queue<Point>q;
q.push( now );
//cout<<"Bfs"<<endl;
while ( !q.empty() ) {
now = q.front(); q.pop();
for ( int i = ; i < ; i++ ) {
int nx = now.x + dx[i], ny = now.y + dy[i];
if ( nx >= && nx < h && ny >= && ny < w && mat[nx][ny] != '#' && !vis[nx][ny] ) {
Point tp = ( Point ) {nx, ny};
q.push( tp );
vis[nx][ny] = vis[now.x][now.y] + ;
if ( id[tp] ) {
dist[x][id[tp] - ] = vis[now.x][now.y];
//cout<<"dist "<<x<<" to "<<id[tp]-1<<' '<<dist[x][id[tp]-1]<<endl;
}
}
}
}
}
d[ << s][s] = ;
int M = path.size();
for ( int i = ; i < ( << M ); ++i ) {
for ( int j = ; j < M; j++ ) {
int p = path[j];
for ( int k = ; << k <= i; k++ ) {
if ( i & ( << k ) ) {
d[i | ( << p )][p] = min( d[i | ( << p )][p], d[i][k] + dist[k][p] );
}
}
}
}
cout << d[( << M ) - ][e] << endl;
}
return ;
}
2014 WAP校园招聘笔试题的更多相关文章
- google2013校园招聘笔试题(全国)
google2013校园招聘笔试题 1. 单项选择题1.1如果把传输速率定义为单位时间内传送的信息量(以字节计算)多少.关于一下几种典型的数据传输速率:1.使用USB2.0闪存盘,往USB闪存盘上拷贝 ...
- Microsoft 2013校园招聘笔试题及解答
Microsoft 2013校园招聘笔试题及解答 题目是自己做的,求讨论.吐槽.拍砖 1. Which of the following callingconvension(s) suppo ...
- Microsoft2013校园招聘笔试题
Microsoft2013校园招聘笔试题 继续求拍砖!!!! 1. You are managing the database of a book publichser, you currently ...
- C# - 2017微软校园招聘笔试题 之 MS Recognition[待解决]
MS Recognition 在线提交: hihoCoder 1402 http://hihocoder.com/problemset/problem/1402 类似: OpenJudge - I:P ...
- 京东2017校园招聘笔试题 【第K个幸运数】
题目描述 4和7是两个幸运数字,我们定义,十进制表示中,每一位只有4和7两个数的正整数都是幸运数字. 前几个幸运数字为:4,7,44,47,74,77,444,447... 现在输入一个数字K,输出第 ...
- 九度OJ 1531 货币面值(网易游戏2013年校园招聘笔试题) -- 动态规划
题目地址:http://ac.jobdu.com/problem.php?pid=1531 题目描述: 小虎是游戏中的一个国王,在他管理的国家中发行了很多不同面额的纸币,用这些纸币进行任意的组合可以在 ...
- PPS2013校园招聘笔试题
转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/11473405 一.简答题 (1)一位老师有2个推理能力很强的学生,他告诉 ...
- Microsoft2013校园招聘笔试题及解答
继续求拍砖!!!! 1. You are managing the database of a book publichser, you currently store the book orders ...
- 2012Google校园招聘笔试题
1.已知两个数字为1~30之间的数字,甲知道两数之和,乙知道两数之积,甲问乙:“你知道是哪两个数吗?”乙说:“不知道”.乙问甲:“你知道是哪两个数吗?”甲说:“也不知道”.于是,乙说:“那我知道了”, ...
随机推荐
- Hibernate不调用update却自动更新
案例: TInfCustomer cus = (TInfCustomer) this.baseDao.getOne(helper); cus.setXXX cus .setXXX 不调用update也 ...
- JavaScript 调试小技巧
'debugger;' 除了console.log,debugger就是另一个我很喜欢的快速调试的工具,将debugger加入代码之后,Chrome会自动在插入它的地方停止,很像C或者Java里面打断 ...
- Navi.Soft30.框架.Mobile.开发手册
1概述 1.1应用场景 互联网的发展,使用基于Web的软件异军突起,目前占据着相当大的市场份额,而手机,平板电脑等移动端设备的频繁使用,使移动端的软件快速发展,逐步有超越Web软件的趋势 移动软件中, ...
- 【分享】分享一个压缩 PNG 的网站 TinyPNG
TinyPNG 能做什么? TinyPNG 采用智能的有损压缩技术来减少你的 PNG 文件的文件大小.通过选择性地减少图像中的颜色数量,更少的字节用于存储数据.效果几乎是看不见的,但它在文件大小方面差 ...
- struts2:异常处理
Struts2框架提供了自己的异常处理机制,只需要在struts.xml文件中配置异常处理即可,而不需要在Action方法中来捕捉异常. 传统方法 public String execute() th ...
- Equals Finalize GetHashCode GetType MemberwiseClone ReferenceEquals ToString String.IsInterned
参考资料: http://blog.csdn.net/afgasdg/article/details/6889383 http://www.cnblogs.com/skyivben/archive/2 ...
- netbeans项目中排除node_modules文件夹
由于项目中的javascript使用了gulp编译技术,所以在web目录下有js的源码目录,其中又有gulp所使用的nodeJS模块,node_modules下面小文件很多,所以造成netbeans扫 ...
- 程序员之路:以Android证道
大道三千,何以证道? 最近有私信.邮件给我咨询一些职业生涯规划的同学,我在这里以过来人的身份给大家一些建议. 任何行业,任何职位,无论高低,无论大小,都可以分为广博.精深两个方向. 精深自然指的是在某 ...
- ios开发人员mac空间不够用的解决办法
有时候,当我们的mac硬盘空间不够用的时候,我们查看“用户”文件夹,发现这个文件夹占用了很大的存储空间,可是当我们一个一个查看这个文件夹下的子文件夹所占的存储空间大小并把这些存储空间大小加起来的时候却 ...
- [转]OOPC:Object-Oriented Programming in C
转载自:http://www.cnblogs.com/stli/archive/2010/10/16/1853190.html OOPC是指OOP(Object-Oriented Programmin ...