tyvj1117 拯救ice-cream

 

背景

天好热……Tina顶着那炎炎的烈日,向Ice-cream home走去……
可是……停电了……
冰淇淋们躺在Ice-cream home的冰柜里,慢慢地……慢慢地……融化…………
你说,她能赶在冰淇淋融化完之前赶到Ice-cream home去吗?

描述

给你一张坐标图,s为Tina的初始位置,m为Ice-cream home的位置,‘.’为路面,Tina在上面,每单位时间可以移动一格;‘#’为草地,Tina在上面,每两单位时间可以移动一格(建议不要模仿—毕竟Tina还小);‘o’是障碍物,Tina不能在它上面行动。也就是说,Tina只能在路面或草地上行走,必须绕过障碍物,并到达冰淇淋店。但是…………不保证到达时,冰淇淋还未融化,所以……就请聪明的你……选择最佳的方案啦…………如果,Tina到的时候,冰淇淋已经融化完了,那她可是会哭的。

输入格式

依次输入冰淇淋的融化时间t(0<t<1000),坐标图的长x,宽y(5<=x,y<=25){太长打起来好累……},和整张坐标图。

输出格式

判断按照最优方案是否可以赶在冰淇淋融化之前到达冰淇淋店(注:当T=最优方案所用时间,则判断为未赶到),如赶到,输出所用时间;如未赶到,输出Tina的哭声——“55555”(不包括引号)。

测试样例1

输入

11 
10 

......s... 
.......... 
#ooooooo.o 
#......... 
#......... 
#......... 
#.....m... 
#.........

输出

10

思路:

普通广搜+优先队列

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
struct node{
    int x;
    int y;
    int dist;
    friend bool operator < (node a,node b){
        return a.dist > b.dist;
    }
};
priority_queue<node> q;
int t,x,y,startx,starty,endx,endy,map[50][50],jud[50][50];
int dx[4] = {-1,0,1,0};
int dy[4] = {0,-1,0,1};
void input(){
    cin>>t>>x>>y;
    char cmd;
    for(int i = 1;i <= y;i++){
        for(int j = 1;j <= x;j++){
            cin>>cmd;
            if(cmd == ‘.‘) map[i][j] = 1;
            if(cmd == ‘#‘) map[i][j] = 2;
            if(cmd == ‘o‘) map[i][j] = 3;
            if(cmd == ‘s‘){
                map[i][j] = 1;
                startx = j;
                starty = i;
            }
            if(cmd == ‘m‘){
                map[i][j] = 1;
                endx = j;
                endy = i;
            }
        }
    }
    node tmp;
    tmp.x = startx;
    tmp.y = starty;
    tmp.dist = 0;
    q.push(tmp);
    for(int i = 1;i <= 40;i++){
        for(int j = 1;j <= 40;j++){
            jud[i][j] = 100000000;
        }
    }
}
bool bfs(){
    node now,next;
    int nx,ny;
    while(!q.empty()){
        now = q.top();
        q.pop();
        for(int i = 0;i < 4;i++){
            nx = now.x + dx[i];
            ny = now.y + dy[i];
            if(nx < 1 || nx > x || ny < 1 || ny > y || map[ny][nx] == 3 ||jud[ny][nx] <= now.dist + map[ny][nx]) continue;
            next.x = nx;
            next.y = ny;
            next.dist = now.dist + map[ny][nx];
            if(nx == endx && ny == endy){
                if(next.dist >= t) return false;
                else{
                    cout<<next.dist<<endl;
                    return true;
                }
            }
            q.push(next);
            jud[ny][nx] = next.dist;
        }
    }
}
int main(){
    input();
    if(!bfs()) cout<<55555<<endl;
    return 0;
}
时间: 2024-10-02 07:44:24

tyvj1117 拯救ice-cream的相关文章

Ice Cream Tower

2017-08-18 21:53:38 writer:pprp 题意如下: Problem D. Ice Cream Tower Input file: Standard Input Output file: Standard Ouptut Time limit: 6 seconds Mr. Panda likes ice cream very much especially the ice cream tower. An ice cream tower consists of K ice cr

HackerRank Ice Cream Parlor

传送门 Ice Cream Parlor Authored by dheeraj on Mar 21 2013 Problem Statement Sunny and Johnny together have M dollars they want to spend on ice cream. The parlor offers N flavors, and they want to choose two flavors so that they end up spending the whol

codeforces 686A A. Free Ice Cream(水题)

题目链接: A. Free Ice Cream //#include <bits/stdc++.h> #include <vector> #include <iostream> #include <queue> #include <cmath> #include <map> #include <cstring> #include <algorithm> #include <cstdio> using

【HackerRank】Ice Cream Parlor

Sunny and Johnny together have M dollars which they intend to use at the ice cream parlour. Among N flavors available, they have to choose two distinct flavors whose cost equals M. Given a list of cost of N flavors, output the indices of two items wh

How to Implement Bluetooth Low Energy (BLE) in Ice Cream Sandwich

ShareThis - By Vikas Verma Bluetooth low energy (BLE) is a feature of Bluetooth 4.0 wireless radio technology, aimed at new, principally low-power and low-latency, applications for wireless devices within a short range. As I discussed in my previous

E. Sonya and Ice Cream(开拓思维)

E. Sonya and Ice Cream time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Sonya likes ice cream very much. She eats it even during programming competitions. That is why the girl decided that

Gym - 101670G Ice cream samples(CTU Open Contest 2017 尺取法)

题目: To encourage visitors active movement among the attractions, a circular path with ice cream stands was built in the park some time ago. A discount system common for all stands was also introduced. When a customer buys ice cream at some stand, he

CodeForces 804C Ice cream coloring

Ice cream coloring 题解: 这个题目中最关键的一句话是, 把任意一种类型的冰激凌所在的所有节点拿下来之后,这些节点是一个连通图(树). 所以就不会存在多个set+起来之后是一个新的完全图. 所以只要直接去做就好了. 对于每个节点来说,染色. 代码: #include<bits/stdc++.h> using namespace std; #define Fopen freopen("_in.txt","r",stdin); freope

CodeForces 686A Free Ice Cream (水题模拟)

题意:给定初始数量的冰激凌,然后n个操作,如果是“+”,那么数量就会增加,如果是“-”,如果现有的数量大于等于要减的数量,那么就减掉,如果小于, 那么孩子就会离家.问你最后剩下多少冰激凌,和出走的孩子数量. 析:多水的一个题,就是一个模拟,如果是+,就加上,如果是‘-’,就判断一下,如果不够,就记录下来. 代码如下: #include <iostream> #include <cmath> #include <cstdlib> #include <set>