【模拟与高精度】【JAVA】P1563 [NOIP2016 提高组] 玩具谜题

点击原题目

题意:模拟寻找眼镜的过程,通过小人的面向和提供的指令寻找眼镜。
思路:

存放数据通过两个String数组实现 通过题上给出的条件可以总结以下结论
1.小人朝向圈内,左边是顺时针方向
2.小人朝向圈内,右边是逆时针方向
3.小人朝向圈外,左边是顺时针方向
4.小人朝向圈外,右边是逆时针方向
寻找眼镜的指令就这四种情况,但是通过观察可以发现,其中的1、3可以合并2、4也可以合并 这样就是两种情况了。
1.圈内左边和圈外右边为顺时针,也就是小人朝向为0指令为0 和小人朝向为1 指令为1
2.圈内右边和圈外左边为逆时针 0 1和1 0
条件判断已经有了,接下来就是如何处理数据 因为数组的下标从0开始,而小人的位置是从1开始,所以这里为了统一,就把小人的位置也从0开始

对于顺时针移动的理解:倒着走i个单位,相当于正着走n-i个单位,把当前位置结合起来就是(当前位置+n-i)
顺时针:(当前指向小人的位置+小人个数-移动长度)% 小人个数
逆时针:(当前小人位置+移动长度)%小人个数

package LOQ.模拟与高精度; import java.util.Scanner; public class P1563_2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(), m = sc.nextInt(); String[] pepos = new String[n]; //小人个数及朝向 String[] orders = new String[m]; //指令 sc.nextLine(); //吃掉回车符 int index = 0; //记录当前指向小人坐标 for (int i = 0; i < n; i++) { pepos[i] = sc.nextLine(); } for (int i = 0; i < m; i++) { orders[i] = sc.nextLine(); } for (int i = 0; i < m; i++) { String[] temp = pepos[index].split(" "); //从第一个小人开始 String[] order = orders[i].split(" "); //获取指令 //顺时针 if ((order[0].equals("0") && temp[0].equals("0")) || (order[0].equals("1") && temp[0].equals("1"))) { index = (index + n - Integer.parseInt(order[1])) % n; } else { //逆时针 index = (index + Integer.parseInt(order[1])) % n; } } String[] res = pepos[index].split(" "); System.out.println(res[1]); } }

__EOF__

本文作者lnnau
本文链接https://www.cnblogs.com/wlunan/p/15948473.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Lnnau  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示