USACO The Tamworth Two 模拟

一道模拟题不过要担心的是牛或者人在转弯的时候,另一方如果能走,那么要走,不能停留。

还是蛮简单的。

调试输出的话可以看到具体追击过程

Source Code:

/*
ID: wushuai2
PROG: ttwo
LANG: C++
*/
//#pragma comment(linker, "/STACK:16777216") //for c++ Compiler
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <cstring>
#include <cmath>
#include <stack>
#include <string>
#include <map>
#include <set>
#include <list>
#include <queue>
#include <vector>
#include <algorithm>
#define Max(a,b) (((a) > (b)) ? (a) : (b))
#define Min(a,b) (((a) < (b)) ? (a) : (b))
#define Abs(x) (((x) > 0) ? (x) : (-(x)))
#define MOD 1000000007
#define pi acos(-1.0)
#define RV(num) ((num) > 0 ? 0 : 1)

using namespace std;

typedef long long           ll      ;
typedef unsigned long long  ull     ;
typedef unsigned int        uint    ;
typedef unsigned char       uchar   ;

template<class T> inline void checkmin(T &a,T b){if(a>b) a=b;}
template<class T> inline void checkmax(T &a,T b){if(a<b) a=b;}

const double eps = 1e-7      ;
const int M = 660000         ;
const ll P = 10000000097ll   ;
const int INF = 0x3f3f3f3f   ;
const int MAX_N = 20         ;
const int MAXSIZE = 101000000;

ofstream fout ("ttwo.out");
ifstream fin ("ttwo.in");

int dir[4][2] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};
char gra[11][11];
int dir_f, dir_c;

struct sc{
    int x, y;
}pos[2], nxt_pos[2], sta[2];

bool check(int x, int y){
    if(x >= 1 && x <= 10 && y >= 1 && y <= 10){
        if(gra[x][y] != ‘*‘){
            return true;
        }
    }
    return false;
}

bool finish(){
    if(pos[0].x == pos[1].x && pos[1].y == pos[0].y){
        return true;
    } else  return false;
}

int main(){
    int i, j, k, l, m, n, t, s, c, w, q, u, v, num, val;
    for(i = 1; i <= 10; ++i){
        for(j = 1; j <= 10; ++j){
            fin >> gra[i][j];
            if(gra[i][j] == ‘F‘){
                sta[0].x = i, sta[0].y = j;
                //pos[0].x = i, pos[0].y = j;
            } else if(gra[i][j] == ‘C‘){
                sta[1].x = i, sta[1].y = j;
                //pos[1].x = i, pos[1].y = j;
            }
        }
    }
    int ans = 1;
    int dir_f = 0;
    int dir_c = 0;
    pos[0] = sta[0], pos[1] = sta[1];
    for(;;){
        /*
        for(i = 1; i <= 10; ++i){
            for(j = 1; j <= 10; ++j){
                if(pos[0].x == i && pos[0].y == j){
                    fout << ‘F‘;
                } else if(pos[1].x == i && pos[1].y == j){
                    fout << ‘C‘;
                } else if(gra[i][j] == ‘*‘) fout << ‘*‘;
                else    fout << ‘.‘;
            }
            fout << endl;
        }
        fout << endl;
        */
        nxt_pos[0].x = pos[0].x + dir[dir_f][0];
        nxt_pos[0].y = pos[0].y + dir[dir_f][1];
        nxt_pos[1].x = pos[1].x + dir[dir_c][0];
        nxt_pos[1].y = pos[1].y + dir[dir_c][1];
        if(check(nxt_pos[0].x, nxt_pos[0].y) && check(nxt_pos[1].x, nxt_pos[1].y)){
            pos[0] = nxt_pos[0], pos[1] = nxt_pos[1];
        } else if(!check(nxt_pos[0].x, nxt_pos[0].y) && !check(nxt_pos[1].x, nxt_pos[1].y)){
            dir_f = (dir_f + 1) % 4;
            dir_c = (dir_c + 1) % 4;
        } else if(check(nxt_pos[0].x, nxt_pos[0].y) && !check(nxt_pos[1].x, nxt_pos[1].y)){
            dir_c = (dir_c + 1) % 4;
            pos[0] = nxt_pos[0];
        } else if(!check(nxt_pos[0].x, nxt_pos[0].y) && check(nxt_pos[1].x, nxt_pos[1].y)){
            dir_f = (dir_f + 1) % 4;
            pos[1] = nxt_pos[1];
        }
        if(finish()){
            break;
        }
        ++ans;
        if(ans > 10000){
            ans = 0;
            break;
        }
    }

    fout << ans << endl;
    fin.close();
    fout.close();
    return 0;
}
时间: 2024-10-27 10:53:22

USACO The Tamworth Two 模拟的相关文章

USACO2.4 The Tamworth Two[模拟]

题目描述 两只牛逃跑到了森林里.农夫John开始用他的专家技术追捕这两头牛.你的任务是模拟他们的行为(牛和John). 追击在10x10的平面网格内进行.一个格子可以是: 一个障碍物, 两头牛(它们总在一起), 或者 农民John. 两头牛和农民John可以在同一个格子内(当他们相遇时),但是他们都不能进入有障碍的格子. 一个格子可以是: . 空地 障碍物 C 两头牛 F 农民John 这里有一个地图的例子: *...*..... ......*... ...*...*.. ..........

【USACO】Transformations(模拟)

Transformations A square pattern of size N x N (1 <= N <= 10) black and white square tiles is transformed into another square pattern. Write a program that will recognize the minimum transformation that has been applied to the original pattern given

USACO 1.2 Transformations (模拟)

模拟题目,按照题目给定的要求变换图形即可,变换的优先级依次减小.这个题目我写的很乱.不过最还还是勉强可以运行 /* ID:twd30651 PROG:transform LANG:C++ */ #include<iostream> #include<fstream> #include<stdlib.h> #include<string.h> using namespace std; #define MAX 10 char a[MAX][MAX]; char

usaco The Tamworth Two

john和牛在二维的图里面跑,john要抓住牛. 牛和john在遇到墙或者图的边界时都会花一单位的时间顺时针转动90度.否则花一单位时间往前走一格,当牛和john走到同一个格子中时,john抓住了牛. 求john抓住牛要多久.抓不住时输出0. 一开始想了很久如何判断抓不住的情况,相通了之后还是很简单的. john和牛都走到了以前走到位置,且保持着以前相同的方向.则说明陷入了循环(再也抓不住了) /* ID: modengd1 PROG: ttwo LANG: C++ */ #include <i

BZOJ 3888 Usaco 2015 Jan Stampede 模拟

题目大意 给出一些奶牛,一个人在原点观察,牛和牛之间又互相遮挡的关系,给出每头牛的运行方式和位置,问这个人最终会看到多少头牛. 思路 知道了运行方式,我们就知道这头牛在什么时间段会遮挡住人的视线,然后从高到低弄个东西维护一下覆盖什么的,这个题就变成了POJ的Mayor's posters. 注意下时间点和时间段的区别就行了. CODE #define _CRT_SECURE_NO_WARNINGS #include <cstdio> #include <cstring> #incl

USACO Runaround Numbers 模拟

根据题意的 Runaround 规则去找比当前数大的最近的一个 Runaround数字 模拟题~ Source code: /* ID: wushuai2 PROG: runround LANG: C++ */ //#pragma comment(linker, "/STACK:16777216") //for c++ Compiler #include <stdio.h> #include <iostream> #include <fstream>

USACO Wormholes(模拟)

题目请点我 题解: 这道题思路很简单,就是简单的深搜,找出所有的组合,然后判断能否成环.关键在于如何判断能否成环,我的思路是利用递归模拟,看能否第二次经过某一个点.中间也出现了错误,首先,每次访问的下一个点应该是同一行上当前点右边的第一个点:其次,某个点被访问过必须是作为起点被访问过,而不仅仅是到达. 代码实现: /* ID: eashion LANG: C++ TASK: wormhole */ #include <iostream> #include <cstdio> #inc

Milking Cows 挤牛奶 USACO 排序 模拟

1005: 1.2.1 Milking Cows 挤牛奶 时间限制: 1 Sec  内存限制: 128 MB提交: 15  解决: 9[提交] [状态] [讨论版] [命题人:外部导入] 题目描述 1.2.1 Milking Cows 挤牛奶 (milk2.pas/c/cpp) 三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶.第一个农民在300秒(从5点开始计时)给他的牛挤奶,一直到1000秒.第二个农民在700秒开始,在 1200秒结束.第三个农民在1500秒开始2100秒结束.期间最长的至

USACO Milking Cows(模拟)

题目请点我 题意: 题意很简单,最开始的时候想要用优先队列存储时间,用map存储对应时间起点与终点.按时间轴顺序排列的思路是没错的,但是忽略了很重要的一点,一个时间起点可能会有多个对应的时间终点.改用结构体存储,定义cmp,得到时间轴.有两个变量表示总的时间起点和终点,注意起点与终点变换的条件,不断向后遍历就可以了. 代码实现: /* ID: eashion LANG: C++ TASK: milk2 */ #include <iostream> #include <cstdio>