• 蓝桥杯 兰顿蚂蚁(模拟)


    历届试题 兰顿蚂蚁  
    时间限制:1.0s   内存限制:256.0MB
        
    问题描写叙述


      兰顿蚂蚁。是于1986年,由克里斯·兰顿提出来的,属于细胞自己主动机的一种。

      平面上的正方形格子被填上黑色或白色。在当中一格正方形内有一仅仅“蚂蚁”。
      蚂蚁的头部朝向为:上下左右当中一方。



      蚂蚁的移动规则十分简单:
      若蚂蚁在黑格,右转90度,将该格改为白格。并向前移一格;
      若蚂蚁在白格,左转90度。将该格改为黑格,并向前移一格。

      规则尽管简单。蚂蚁的行为却十分复杂。

    刚刚開始时留下的路线都会有接近对称,像是会反复。但不论起始状态怎样。蚂蚁经过漫长的混乱活动后,会开辟出一条规则的“快速公路”。

      蚂蚁的路线是非常难事先预測的。

      你的任务是依据初始状态,用计算机模拟兰顿蚂蚁在第n步行走后所处的位置。

    输入格式
      输入数据的第一行是 m n 两个整数(3 < m, n < 100)。表示正方形格子的行数和列数。


      接下来是 m 行数据。


      每行数据为 n 个被空格分开的数字。

    0 表示白格。1 表示黑格。

      接下来是一行数据:x y s k, 当中x y为整数,表示蚂蚁所在行号和列号(行号从上到下增长,列号从左到右增长,都是从0開始编号)。s 是一个大写字母,表示蚂蚁头的朝向,我们约定:上下左右分别用:UDLR表示。k 表示蚂蚁走的步数。

    输出格式
      输出数据为两个空格分开的整数 p q, 分别表示蚂蚁在k步后。所处格子的行号和列号。
    例子输入
    5 6
    0 0 0 0 0 0
    0 0 0 0 0 0
    0 0 1 0 0 0
    0 0 0 0 0 0
    0 0 0 0 0 0
    2 3 L 5
    例子输出
    1 3
    例子输入
    3 3
    0 0 0
    1 1 1
    1 1 1
    1 1 U 6
    例子输出
    0 0
    仅仅想弱弱的说一句写的代码真挫大哭,只是过了算了
    ac代码
    #include<stdio.h>
    #include<string.h>
    int map[1010][1010];
    int sx,sy,dir;
    void fun(int sign)
    {
    	if(dir==1)
    	{
    		if(sign)
    		{
    			dir=4;
    			sy++;
    		}
    		else
    		{
    			dir=3;
    			sy--;
    		}
    	}
    	else
    		if(dir==2)
    		{
    			if(sign)
    			{
    				dir=3;
    				sy--;
    			}
    			else
    			{
    				dir=4;
    				sy++;
    			}
    		}
    		else
    			if(dir==3)
    			{
    				if(sign)
    				{
    					dir=1;
    					sx--;
    				}
    				else
    				{
    					dir=2;
    					sx++;
    				}
    			}
    			else
    				if(dir==4)
    				{
    					if(sign)
    					{
    						dir=2;
    						sx++;
    					}
    					else
    					{
    						dir=1;
    						sx--;
    					}
    				}
    }
    int main()
    {
    	int n,m;
    	while(scanf("%d%d",&n,&m)!=EOF)
    	{
    		int i,j,k;
    		char c;
    		for(i=0;i<n;i++)
    		{
    			for(j=0;j<m;j++)
    				scanf("%d",&map[i][j]);
    		}
    		scanf("%d %d %c %d",&sx,&sy,&c,&k);
    		if(c=='U')
    			dir=1;
    		else
    			if(c=='D')
    				dir=2;
    			else
    				if(c=='L')
    					dir=3;
    				else
    					if(c=='R')
    						dir=4;
    		while(k--)
    		{
    			int px=sx;
    			int py=sy;
    			fun(map[sx][sy]);
    			if(map[px][py])
    				map[px][py]=0;
    			else
    				map[px][py]=1;
    		}
    		printf("%d %d
    ",sx,sy);
    	}
    }


  • 相关阅读:
    Eclipse快捷键大全
    Quartz任务调度快速入门
    Spring整合logback日志
    Java实现二维码的生成与解析
    跨域问题及解决方案
    SpringBoot项目直接在linux下运行
    SpringBoot拦截器中使用RedisTemplate
    Codeforces Round #345 (Div. 1) C. Table Compression dp+并查集
    HDU 4489 The King’s Ups and Downs dp
    HDU 4747 Mex 递推/线段树
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7068204.html
Copyright © 2020-2023  润新知