zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    PHP网络编程
    traits的使用
    在Apache中使用mod_rewrite模块重写URL
    Lamp下安全配置随笔
    微信开发准备工作
    SQL SERVER技术内幕之7 透视与逆透视
    MVP开发模式的理解
    SQL SERVER技术内幕之5 表表达式
    SQL SERVER技术内幕之4 子查询
    SQL Server Management Studio
  • 原文地址:https://www.cnblogs.com/wushuaiyi/p/4298569.html
Copyright © 2011-2022 走看看