题目地址:
题意:给你一个n、m、k,有四种操作n+m,n-m,n*m,n%m,问你最少经过多少步,使得最后的结果=(初始n+1)%k
题解:很明显的BFS,然后我就很快写,果断RE,发现里面可能有负数,改了之后还是错了,看了discuss才发现原来要%mk,现在还是不是很懂为什么,这里discuss有人给出了解释——
解释一下为什么要%mk:
对于N来说,其中的过程会有N+m,N-m,以及N*m,按照正常的步骤来说,统一%K,但是因为有N%m的插足,
例如: (N+m-m*m%m)%k (从左到右依次执行,没有优先级)
(N%k+m%k-m%k*m%k%m%k)%k这两个是绝对不相等的
但是统一%mk是相等的,因为你%mk,是对所有的()里的数进行的,而第二个式子中因为对除最后一个数外进行的事%mk,而其他数进行的仅是%k所以不相等。
AC代码:
#include #include #include #include #include #include #include #include #include #include #include #include #include