[Code Jam] Snapper Chain ---常规算法
来源:互联网 发布:vb.net 连接本地数据库 编辑:程序博客网 时间:2024/05/04 14:07
虽然是常规方法,但是也应用了很难察觉的一个技巧:
1. 设置两组数组,分别储存ON/OFF的状态和POWERED/UNPOWERED的状态。
2. POWERED/UNPOWERED的状态可以由ON/OFF的状态推出
3. 对这两组数进行异或运算,得出的新数组成为ON/OFF的新状态
显然,这个方法的关键在于异或运算,其具体特点在以前转载的一篇文章中已经提到过。
本题中运用“^”的原理在于:1异或任何数 = 任何数取反
在Java中全部代码如下:
有以下几点需要注意:
1. 本例中的算法其实相当具有代表性,其执行过程就是依次对变量数组进行更新赋值,在构造这样的运算时,结构如下:
Case [i] 循环开始;
读取数据构造数组;
首先讨论特殊情况(比如某变量为0或者1时等),得出solution;
else
对数组进行初始化赋值;
开始循环过程,逐步赋值;(这里要注意每次更新数组的值要保证上次循环的结果不会造成干扰)
读取数组中的值,得出solution;
输出Case [i] 的结果;
Case [i] 循环结束;
2. break的用法:
break和continue的区别是,在for和while循环中:
break是跳出本层循环,后面没有操作。
continue是不执行本次操作,但是直接转入下一次循环,也就是循环继续。
3. 本次算法的复杂度取决于N和K的数量级,当两者比较小时,比如1000,速度几乎不受影响。
但是如果其中一个出现了10的8次方这种大数量级,那么算法将会慢的不可忍受,因此也不可能解决large input的问题。
那么如何用高效的方法解决呢?下一篇文章将会讲到。
- [Code Jam] Snapper Chain ---常规算法
- [Code Jam] Snapper Chain ---高效算法
- Google Code Jam 2010 Qualification Round 资格赛 Problem A. Snapper Chain 问题A.按扣链条
- 关于算法、code jam
- Problem A. Snapper Chain 问题A.按扣链条 解决办法
- Chain Code
- Google Code Jam 2006
- Google China Code Jam
- code.jam - pixelcanvas
- code.jam - egg drops
- Google Code Jam
- [Code Jam] Alien Language
- [Code Jam] Watersheds
- [Code Jam] Fair Warning
- [Code Jam] Theme Park
- Code Jam练习
- Google Code Jam 130914
- Code jam beta 2008
- 使用MC52i/MC55i连接FTP服务器
- Java反射机制深入研究
- 动态链接库(Dynamic Link Library)学习笔记
- 《多线程服务器的适用场合》-- 例释与答疑
- Java反射机制详解与实例
- [Code Jam] Snapper Chain ---常规算法
- 网络资源
- protel转gerber
- linux信任关系
- POJ 3253
- 详解NoSQL数据库使用实例
- 如何在Visual studio 2003中加载Drectx9.0
- Tomcat中配置数据源连接池
- 求二叉树中节点的最大距离