【HDU】 1104 Remainder
来源:互联网 发布:上海德语培训班知乎 编辑:程序博客网 时间:2024/06/13 21:22
Remainder
题目链接
- Remainder
题目大意
题意还是很好理解的,就是给你3个数n,k,m,现在n可以通过一系列操作:+m、-m、*m、%m来达到另外一个状态(变成另外一个数),现在问你是否存在一种可能使[(最初的N) + 1] % K 和 (现在N) % K 相等?输出最小步数和方法。
题解
挺有意思的一个题,首先可以看到这明显需要广搜了,但是很蛋疼的是我们不能直接把N作为状态….这时候容易想到把n%k作为状态,这样就只有1000种情况了,但是我们又发现(n%k)%m和n%m是不一定相等的…于是这样定义状态也不行…
在这里巧妙就巧妙在:我们发现(n%(m*k))%k与n%k是相等的,与n%m也是相等的,所以我们把n%(m*k)作为我们这里的状态,好消息是n*k仅为1000000,这样我们就可以把状态存下来了。
注意这里的取%是mod…
代码
#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>using namespace std;int n,m,k,d,sta[1000005],pre[1000005],op[1000005],q[1000005],ans,mod;bool vis[1000005];void outp(int t){ int h=0,i=t; memset(sta,0,sizeof(sta)); while (i!=0) { sta[h++]=op[i]; i=pre[i]; } printf("%d\n",h); for (int k=h-1;k>=0;k--) if (sta[k]==0) printf("+"); else if (sta[k]==1) printf("-"); else if (sta[k]==2) printf("*"); else printf("%%"); printf("\n");}void bfs(int s){ int h=0,t=0; memset(vis,0,sizeof(vis)); memset(pre,0,sizeof(pre)); memset(op,0,sizeof(op)); memset(q,0,sizeof(q)); q[h++]=s; vis[s]=1; while(h!=t) { int v=q[t++],u; if (v%k==d) { outp(t-1); return ; } for (int i=0;i<4;i++) { if (i==0) u=v+m; else if (i==1) u=v-m; else if (i==2) u=v*m; else u=v%m; u=(u%mod+mod)%mod; if (!vis[u]) { vis[u]=1; pre[h]=t-1; op[h]=i; q[h++]=u; } } } printf("0\n");}int main(){ while(scanf("%d%d%d",&n,&k,&m),n!=0 || m!=0 || k!=0) { mod=m*k; d=((n+1)%k+k)%k; ans=(n%mod+mod)%mod; //if (d==k) printf("0\n"); //else bfs(ans); } return 0;}
0 0
- HDU 1104 Remainder
- hdu 1104 Remainder
- hdu 1104 Remainder BFS
- HDU - 1104 Remainder 搜索
- Hdu 1104 Remainder[Bfs]
- HDU 1104 Remainder
- HDU 1104 Remainder
- Remainder hdu 1104
- hdu 1104 Remainder 队列
- 【bfs】hdu 1104 Remainder
- hdu 1104 Remainder(BFS)
- HDU 1104 remainder
- 【HDU】 1104 Remainder
- hdu 1104 remainder bfs+数论
- HDU 1104 Remainder (BFS)
- HDU 1104题Remainder(bfs)
- hdu 1104 Remainder 【广度优先搜索+数论】
- hdu 1104 Remainder(BFS+数论)
- LAMP环境的搭建
- Bean property 'productService' is not writable or has an invalid setter method. Does the parameter t
- 第13周实践项目2动物这样叫(1)
- Sorting Railway Cars
- OJ提交题目中的语言选项里G++与C++的区别
- 【HDU】 1104 Remainder
- Deeplearning常用的模型以及方法
- hdu5524 Subtrees
- 动态规划12之1017
- 第一节课作业:(第一篇博客)
- 汇编学习(五)8086汇编拾遗 (4)
- 2016.5.25(1)0/1背包问题
- 菜鸟学Java之错将for循环大写
- Android自定义Camera