记录编号 569964 评测结果 AAAAAAAAA
题目名称 [USACO 2.4]两只塔姆沃斯牛 最终得分 100
用户昵称 Gravatarlihaoze 是否通过 通过
代码语言 C++ 运行时间 0.000 s
提交时间 2022-03-20 09:30:45 内存使用 0.00 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#include <string>
#define OPEN(_x) freopen(#_x".in", "r", stdin); freopen(#_x".out", "w", stdout)
#define MAX(_a, _b) [&](int __a, int __b) { return __a < __b ? __b : __a; }((_a), (_b))
#define MIN(_a, _b) [&](int __a, int __b) { return __a > __b ? __b : __a; }((_a), (_b))
#define ABS(_x) [&](int __x) { return __x < 0 ? -__x : __x; }(_x)
#define fi first
#define se second 

using ll = long long;
using PII = std::pair<int, int>;

namespace IO {
    template <typename T> inline T read() {
        char ch = getchar();
        T ret = 0, sig = 1;
        while(ch < '0' || ch > '9') { if(ch == '-') sig = -1; ch = getchar(); }
        while(ch >= '0' && ch <= '9') ret *= 10, ret += ch - 48, ch = getchar();
        return ret * sig;
    }
    template <typename T> inline void write(T out) {
        if(!out) { putchar('0'), putchar(' '); return; }
        int stk[100], tt = 0;
        if(out < 0) out = -out, putchar('-');
        while(out) stk[tt++] = out % 10, out /= 10;
        for(register int i = --tt; i>=0; --i) putchar(stk[i] + 48);
        putchar(' ');
    }
    template <typename T> inline void read(T& ret) { ret = IO::read<T>(); }
    template <typename T, typename... Args> inline void read(T& x, Args&... args) { IO::read(x), IO::read(args...); }
    template <typename T, typename... Args> inline void write(T x, Args... args)  { IO::write(x), IO::write(args...); }
};


const int N = 20;
int g[N][N];
char s[N];
PII f, c;
PII dir[] = { { -1, 0 }, { 0, 1 }, { 1, 0 }, { 0, -1 } }; 
int dc = 0, df = 0;
int cnt;

inline bool is_valid(PII x) { return x.fi <= 10 && x.fi >= 1 && x.se <= 10 && x.se >= 1; }
inline void turn(int &x) { x = (x + 1) % 4; }

int main() {
    #ifdef DEBUG
    OPEN(test);
    #endif
    OPEN(ttwo);
    for (register int i = 1; i<=10; ++i) {
        scanf("%s", s+1);
        for (register int j = 1; j<=10; ++j) {
            if(s[j] == 'F') f = { i, j };
            else if(s[j] == 'C') c = { i, j };
            g[i][j] = (s[j] != '*');
        }
    } 
    for (register int i = 1; i<=10000 && f != c; ++i) {
        PII nc = { c.fi + dir[dc].fi, c.se + dir[dc].se };
        PII nf = { f.fi + dir[df].fi, f.se + dir[df].se };

        if (!g[nc.fi][nc.se]) turn(dc);
        else c = nc;
        if (!g[nf.fi][nf.se]) turn(df);
        else f = nf;

        cnt ++;
    }
    if (f == c) IO::write(cnt);
    else putchar(48);
    return 0;
}