链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客Q:Rabbit\rm\mathcal RabbitRabbit 拿到了一张环形的大富翁地图,地图被平均划分为了 nnn 个地块,地块的编号以 111 为起点,顺时针进行排布。即 111 号地块的顺时针方向依次为 222, 333, …\dots… 号地块;111 号地块的逆时针方向依次为 nnn, n−1n-1n−1, …\dots… 号地块(由于是环形的,所以 111 号地块与 nnn 号地块相邻,如下图所示)。
\,\,\,\,\,\,\,\,\,\,游戏过程如下:系统会给定一个长度为 mmm 的行动力序列 a1,a2,…,ama_1,a_2,\dots,a_ma1,a2,…,am ,在第 iii (1≤i≤m1\le i \le m1≤i≤m) 回合,Rabbit\mathcal RabbitRabbit 都需要移动 aia_iai 个地块,但是他可以自由选择移动的方向(换句话说,可以自由选择是向逆时针还是顺时针方向移动 aia_iai 个地块)。
\,\,\,\,\,\,\,\,\,\,在游戏的开始时,Rabbit\rm \mathcal RabbitRabbit 位于 111 号地块,他想知道是否存在这样一种移动方式,使得 mmm 个回合后他依旧在 111 号地块。
输入描述:
\,\,\,\,\,\,\,\,\,\,每个测试文件仅有一组测试数据。 \,\,\,\,\,\,\,\,\,\,第一行输入两个整数 nnn 和 mmm (1≤n1 \le n1≤n, m≤5000m \le 5000m≤5000) 表示地块数量和行动回合数。 \,\,\,\,\,\,\,\,\,\,第二行输入 mmm 个整数 a1,a2,…,ama_1,a_2,\dots,a_ma1,a2,…,am (0≤ai≤2⋅1050\le a_i\le 2 \cdot 10^50≤ai≤2⋅105) 表示行动力序列。
输出描述:
\,\,\,\,\,\,\,\,\,\,如果 mmm 个回合后 Rabbit\rm \mathcal RabbitRabbit 依旧在 111 号地块,则输出 YES\rm YESYES ;否则,请输出 NO\rm NONO 。您可以以任何大小写形式输出答案,例如,yEs\rm yEsyEs 、yes\rm yesyes 和 YeS\rm YeSYeS 都将被视为肯定的回答。
示例1
输入
复制360 3 120 120 120
360 3 120 120 120
输出
复制YES
n, m = map(int,input().split()) lst = list(map(int,input().split())) #dp[i][j]代表第i步能否到达j+1地块 #j == 0就是第一地块 也就是我们dp的目标dp[m][0] dp = [[0]*(n) for i in range(m+1)] dp[0][0] = 1 for i in range(1,m+1): for j in range(n): #第i步能否到达取决与上一步(i-1步)的情况 #第i逆时针 if dp[i-1][(j - lst[i-1])%n] == 1: dp[i][j] = 1 #第i步顺时针 if dp[i-1][(j + lst[i-1])%n] == 1 : dp[i][j] = 1 if dp[m][0]: print('yes') else: print('no')
通过时很激动,毕竟这是我第一次在竞赛中使用dp
虽然最后超时了,但以后还要加油!!!