桐桐的游戏【模拟】

编程入门 行业动态 更新时间:2024-10-27 07:32:24

桐桐的<a href=https://www.elefans.com/category/jswz/34/1770081.html style=游戏【模拟】"/>

桐桐的游戏【模拟】

>Description
有个圆圈,分成N等分,顺时针标号为1到N。假设其中有些段的障碍。桐桐从1号段出发,每次顺时针跳K段,目标是跳到第Z号段,但过程中不能跳到障碍段上去。
假如,N=13,K=3,Z=9,则跳的路径上的段号为1,4,7,10,13,3,6和9,在此假设没有跳到障碍段上去。
现在请帮桐桐求出最小的K。


>Input
第一行有整数N,Z和M(2≤N≤1000,2≤Z,0≤M≤N-2)。
N表示圆分成的段数,Z表示桐桐想跳到的目标段号,M表示障碍数。
第二行有M个数,表示有障碍的段号。段1和段Z保证没有障碍。

>Output
一个数K。


>Sample Input
【输入样例1】
7 4 1
6
【输入样例2】
9 7 2
2 3
【输入样例3】
7 6 2
2 4

>Sample Output
【输出样例1】
1
【输出样例2】
3
【输出样例3】
5


>解题思路
直接模拟T_T。
从小到大看看哪个数可以到达z且不会调到障碍段上。


>代码

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,z,m,a,ans;
bool lhq[1000005],c[1000005];
bool lil(int s)
{int aa=1;c[1]=1;while(1){aa+=s;if(aa>n) aa%=n; //!!!环if(lhq[aa]) return 0; //如果踩到障碍if(c[aa]) return 0; //如果到达过if(aa==z) return 1; //如果到达了z}
}
int main()
{scanf("%d%d%d",&n,&z,&m);for(int i=1;i<=m;i++)scanf("%d",&a),lhq[a]=1; //标记障碍for(ans=1;ans;ans++){memset(c,0,sizeof(c)); //c记录此点是否到达过(如果第二次到达了这个点且没有到达z,说明永远都不会到达)if(lil(ans)){printf("%d",ans);return 0;}}return 0;
}

更多推荐

桐桐的游戏【模拟】

本文发布于:2023-07-28 21:47:43,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1327115.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:游戏

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!