一个关于甄别重复的小点(ZOJ1476引发的想法)
来源:互联网 发布:sql limit和order by 编辑:程序博客网 时间:2024/05/09 02:06
最近做了ZOJ1476 weird clock(http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1476),发现有一种甄别重复情况的小技术经常在用..那就是定义数组,作为不同情况的标志,来判断是否重复
其实我们在其他方面,比如dfs,最短路径,或者DP中,用到的used也是这个意思..不过我一直没有把它们联系起来
抽象来说,就是找到不同状态的标识符,并将其离散化(且有限),那么我们总可以利用这种技术加以判定重复,
简单的我们可以使用数组,以下标为标识符
复杂的我们也许还需要借助状态本身的特点,比如二维下标也可以做重复判定,更为复杂的,我们可能还需要利用hash来唯一确定状态..
关键:如何确定状态
顺提一句:一定要记得利用这个方法,尤其是对象状态有限且较少,并且状态改变无记忆性(比如本题)
代码如下
#include <stdio.h>#define MAX_TIME 60int main(){/* freopen("test.txt", "r", stdin);*/ int s, d; int i; int num; int time[MAX_TIME]; while (scanf("%d %d", &s, &d), s != 0 || d != 0) { for (i = 0; i < MAX_TIME; i++) time[i] = 0; time[s] = 1; num = 0; while (s != 0) { s = (s * d + s) % MAX_TIME; /*判断重复与否*/ if (time[s] == 1) break; time[s] = 1; num++; } if (s == 0) printf("%d\n", num); else printf("Impossible\n"); } return 0;}
- 一个关于甄别重复的小点(ZOJ1476引发的想法)
- 一个关于Class的小点
- 关于Javascript的小点
- 一个关于oracle日志中一个小点的总结
- 由CSP 题目引发的关于Map的一些想法
- 重复运行一个程序引发的错误
- 关于实际使用https需要注意的一个小点
- 毕业设计引发的一些想法
- 关于文件处理的一个小想法
- 关于以后 WEB 开发的一个想法
- 一个关于在线时间管理工具的想法
- 有一个关于手机的想法
- 关于手机游戏的一个想法
- 关于nginx负载均衡的一个想法
- 一个关于开源社区的想法
- 关于JS中重载的一个想法
- 一个关于短信黑名单的想法
- 有一个关于音乐社交的想法
- 杀入400
- 浅析软件项目管理中十个误区(来自:http://manager.csdn.net/n/20051213/30907.html)
- 面向过程与面向对象方法的比较
- 使用internal(com.android.internal)和hidden(@hide)APIs – Part 1
- 黑客常用的一些cmd命令
- 一个关于甄别重复的小点(ZOJ1476引发的想法)
- 使用IntrospectorCleanupListener 解决quartz引起的内存泄漏
- 中国制造之痛:一部iPhone只赚4美元
- USB端口工作原理
- 使用internal(com.android.internal)和hidden(@hide)APIs – Part 2
- 多线程
- 今天oracle遇到的java.lang.Exception: Exception in sending Request :: null错误解决方法
- PHP上传文件时$_FILES为空
- 多线程总结(一)