zoukankan      html  css  js  c++  java
  • ECNUOJ 2855 贪吃蛇

    贪吃蛇

    Time Limit:1000MS Memory Limit:65536KB
    Total Submit:480 Accepted:109

    Description 

    相信很多人都玩过这个游戏,当然这个题目不是叫你写一个贪吃蛇游戏,而是很简单的模拟而已,为了简化规则,我们把游戏抽象为:

    在H×W的格点上有一条小小的长度为1的蛇,这条蛇每次只能向上下左右四个方向移动一个单位距离。在某些格点上有营养价值不同的蘑菇,当蛇移动到含有蘑菇的点的时候,其生命力会增加相应的值。在每个时间点,其选择的方向是由函数F% 4决定的,其中F0 = 0,F1 = 1,Fn = Fn - 1 + Fn – 2 。如果蛇选择的方向会立即撞到墙,它会沿着该方向的顺时针选择第一个不会撞到墙的方向作为该时刻的方向。初始时刻是0时刻,蛇在左上角,初始生命力为0,某个点上的蘑菇在吃掉后会立刻长出来。最外一圈是墙,没有给出来。

    请你输出T时刻蛇的生命力。方向对应关系为:上(0)、右(1)、下(2)、左(3).

    Input 

    每个文件一个测试数据:

    数据的第一行三个整数H,W,T 。( 2 <= H、W<=100 ,0<=T<=1000 )

    接下来H行,每行W个字符,其中‘.’表示可行走的空地,‘0’-‘9’表示价值不同的蘑菇,相应的价值分别为0-9

    Output 

    对于每组数据,输出一个值,表示T时刻后(含T时刻)蛇的生命力

    Sample Input 

    2 3 4

    145

    1..

    Sample Output 

    10

    Hint:

    0时刻蛇在(0,0) , 方向0,但是会出界,顺时针选择第一个不出界的方向1,生命力1

    1时刻蛇在(0,1) , 方向1,生命力5

    2时刻蛇在(0,2), 方向1,会出界,选择方向2,生命力10

    3时刻蛇在(1,2), 方向2,会出界,选择方向3,生命力10

    4时刻蛇在(1,1), 方向3,生命力10

    (请多体会这个"方向"的含义)

    Source

    解题:我就不吐槽这题,题意真尼玛晦涩难懂

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int maxn = 110;
     4 char table[maxn][maxn];
     5 int H,W,T,f[1001] = {0,1};
     6 const int dir[4][2] = {-1,0,0,1,1,0,0,-1};
     7 bool isIn(int x,int y){
     8     return x < H && x >= 0 && y >= 0 && y < W;
     9 }
    10 int solve(){
    11     int life = isdigit(table[0][0])?table[0][0] - '0':0,nowdir = 0,time = 0;
    12     int x = 0,y = 0;
    13     while(time < T){
    14         int nx = x + dir[nowdir = f[time]][0];
    15         int ny = y + dir[f[time]][1];
    16         while(!isIn(nx,ny)){
    17             nowdir++;
    18             nx = x + dir[nowdir%4][0];
    19             ny = y + dir[nowdir%4][1];
    20         }
    21         x = nx;
    22         y = ny;
    23         time++;
    24         if(isdigit(table[x][y])) life += table[x][y] - '0';
    25     }
    26     return life;
    27 }
    28 int main(){
    29     for(int i = 2; i < 1001; ++i)
    30         f[i] = (f[i-1] + f[i-2])%4;
    31     while(~scanf("%d%d%d",&H,&W,&T)){
    32         for(int i = 0; i < H; ++i)
    33             scanf("%s",table[i]);
    34         printf("%d
    ",solve());
    35     }
    36     return 0;
    37 }
    View Code
  • 相关阅读:
    Web APIs
    变量替换
    用shell脚本实现文件、代码同步上线
    20.31 expect脚本同步文件 20.32 expect脚本指定host和要同步的文件 20.33 构建文件分发系统 20.34 批量远程执行命令
    20.27 分发系统介绍 20.28 expect脚本远程登录 20.29 expect脚本远程执行命令 20.30 expect脚本传递参数
    20.23/20.24/20.25 告警系统邮件引擎 20.26 运行告警系统
    20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析
    20.5 shell脚本中的逻辑判断 20.6 文件目录属性判断 20.7 if特殊用法 20.8/20.9 case判断
    16进制数据拆分
    16进制数据拼接成一个
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/4621973.html
Copyright © 2011-2022 走看看