CodeForces 241F Race

原创 2015年11月17日 20:08:11

题目大意

给定N*M个方格状的街区,其中包括:

  • 若干建筑物,双向直线的道路以及交叉路口组成了TOC。
  • 每个建筑物:占恰好的一个街区。
  • 每条道路:所有道路的宽度都为1个街区,并且道路都是水平的或竖直的。
  • 每个交叉路口:占一个街区,位于道路的交汇处。

保证没有道路和交叉路口是相同的。
给定通过每个街区的时间,给定每个交叉路口的代号(a-z)(保证没有重复)。给定起点和终点,还有路径上所有交叉路口的代号,求在k时刻所在的位置。

解答

这道题可以纯模拟来做,记下每一个交叉路口的位置,由于路是直的,所以相邻两个经过的交叉路口之间应该有一个坐标是相同的,所以我们可以找到路径上相邻两个交叉路口,暴力从起点走到终点,即可得到答案

参考代码

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <iostream>

using namespace std;

int n, m, k;
char ma[200][200];
int x[30], y[30];
int rs, cs, re, ce;
char lu[20000];
int le;

int main()
{
    ios::sync_with_stdio(false);
    cin >> m >> n >> k;
    for (int i = 1; i <= m; i++)
        cin >> (ma[i]+1);
    for (int i = 1; i <= m; i++)
        for (int j = 1; j <= n; j++) {
            if (ma[i][j] >= 'a' && ma[i][j] <= 'z') {
                x[ma[i][j]-'a'] = i;
                y[ma[i][j]-'a'] = j;
                ma[i][j] = '1';
            }
            ma[i][j] -= '0';
        }
    cin >> rs >> cs >> lu >> re >> ce;
    int nx = rs, ny = cs;
    int tt = 0;
    le = strlen(lu);
    int fx;
    while (tt < le) {
        if (x[lu[tt]-'a'] != nx) {
            fx = (x[lu[tt]-'a'] > nx) ? 1 : -1;
            while (k >= ma[nx][ny] && nx != x[lu[tt]-'a']) {
                k -= ma[nx][ny];
                nx += fx;
            }
            if (k < ma[nx][ny]) {
                cout << nx << " " << ny;
                return 0;
            }
            tt++;
            continue;
        }
        if (y[lu[tt]-'a'] != ny) {
            fx = (y[lu[tt]-'a'] > ny) ? 1 : -1;
            while (k >= ma[nx][ny] && ny != y[lu[tt]-'a']) {
                k -= ma[nx][ny];
                ny += fx;
            }
            if (k < ma[nx][ny]) {
                cout << nx << " " << ny;
                return 0;
            }
            tt++;
            continue;
        }
    }
    if (re != nx) {
        fx = (re > nx) ? 1 : -1;
        while (k >= ma[nx][ny] && nx != re) {
            k -= ma[nx][ny];
            nx += fx;
        }
        if (k < ma[nx][ny]) {
            cout << nx << " " << ny;
            return 0;
        }
    }
    if (ce != ny) {
        fx = (ce > ny) ? 1 : -1;
        while (k > ma[nx][ny] && ny != ce) {
            k -= ma[nx][ny];
            ny += fx;
        }
        if (k < ma[nx][ny]) {
            cout << nx << " " << ny;
            return 0;
        }
    }
    cout << re << ce;
    return 0;
}

CodeForces 659 D. Bicycle Race(计算几何 + 数学公式)

传送门 D. Bicycle Race time limit per test1 second memory limit per test256 megabytes inputstandard...
  • qingshui23
  • qingshui23
  • 2016年06月07日 20:38
  • 1614

CodeForces - 868B Race Against Time 思维

CodeForces - 868B Race Against Time 思维 http://codeforces.com/contest/868/problem/B 题意:时针、分针、秒针将钟面分成三...
  • weixin_36571742
  • weixin_36571742
  • 2017年10月05日 19:41
  • 235

Codeforces 592C The Big Race【数学啊】

C. The Big Race time limit per test 1 second memory limit per test 256 megabytes input s...
  • mengxiang000000
  • mengxiang000000
  • 2016年12月15日 18:23
  • 670

Codeforces 592C The Big Race 【GCD && LCM】

C. The Big Race time limit per test 1 second memory limit per test 256 megabytes input standar...
  • chenzhenyu123456
  • chenzhenyu123456
  • 2015年11月01日 21:12
  • 718

Codeforces Round #328 (Div. 2) C. The Big Race (math)

这道题搞了我好几天o(╯□╰)o,看来数学思维还得加强。。 题意: 现在有一段长为t的路程,A每次走的路程为w米,B每次走的路程为b米。然后叫你判断有多少中情况它们两个人能够打成平手(也就是让你从...
  • ACMer_hades
  • ACMer_hades
  • 2015年11月10日 14:58
  • 435

CodeForces 404 Marathon ( 浮点数取模 -- 模拟 )

B. Marathon time limit per test 1 second memory limit per test 256 megabytes input standard in...
  • xiangguangde
  • xiangguangde
  • 2014年04月26日 08:36
  • 1008

Codeforces 868 B Race Against Time(水题)

题目链接 题目大意:给你一个时钟的时间 时h,分m, 秒s。在给出两个时间代表在时钟对应时刻上的点。问这两个点在不穿过时钟的针(包括时针分针秒针)的情况下能互相到达。 题目分析:把时针分针秒针形成...
  • xiuya19
  • xiuya19
  • 2017年10月05日 22:11
  • 126

java多线程(一)Race Condition现象及产生的原因

转载请注明出处http://blog.csdn.net/xingjiarong/article/details/47603813 什么是Race Condition首先,什么是Race Condit...
  • xingjiarong
  • xingjiarong
  • 2016年01月28日 16:11
  • 7279

Data Race Free 的前世今生

Data Race Free 概念诞生的背景,基本思想,及其对 Java 与 C++ 内存模型的影响。...
  • on_1y
  • on_1y
  • 2014年08月17日 21:39
  • 5024

竞争条件(race condition)

在一些操作系统中,协作的进程可能共享一些彼此都能读写的公用存储区。这个公用存储区可能在内存中(可能是在内核数据结构中),也可能是一个共享文件。这里共享存储区的位置并不影响通信的本质及其带来的问题。为了...
  • silentpebble
  • silentpebble
  • 2011年10月24日 11:53
  • 17832
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CodeForces 241F Race
举报原因:
原因补充:

(最多只允许输入30个字)