Google KickStart的一些理解和学习
来源:互联网 发布:吴江法院拍卖公告淘宝 编辑:程序博客网 时间:2024/06/05 10:00
Google KickStart之翻煎饼
题目的大致意思就是读取一个文件,在文件的第一行输入文件的行数,然后读取这些数据,在每一行的数据中第一部分由一个由+(happy side)/-(blank side)组成的字符串,
每一行数据的第二部分为一个整型变量,表示每次可以翻面的个数,且每次翻面必须为这个个数,那么如果可以将这些煎饼全部翻面成为+(happy side)向上,则打印出需要翻面
的次数,否则打印出"IMPOSSIBLE".
官方给出的解题思路是通过判断可以选择放铲子的地方一共由N-K+1,其中N为第一行中字符串的长度,K为第一行中整数的值(即每次翻面的煎饼的个数),
在官网download了一份加拿大ACM选手的答案(C++版本,感觉做算法还是C++好),在题目中遍历的过程中遍历的取值范围即为for(j=0;j+K-1<N;j++),
因为每次翻面的煎饼的个数为K,所以每次需要调整K个煎饼的状态,for(int m=0;m<K;m++),这里出现了一个一开始很费解,理解之后觉得很神奇的地方:
chars[j+m] ^='-'^'+'(这里是我用Java语言复现的结果,原来版本的代码为str[i+j] ^='-'^'+'),这里利用了抑或相互抵消的原理,将原来的状态变为相反的状态;
至于在官网解析中提到的可以用一个count标志位来计数,每次计数到奇数则将count加1,如果计数到偶数,则将count减1,这个操作还是不甚理解
(通过这种方式来减少时间复杂度,原本的时间复杂度为O(n^2),改进以后为O(n)???).
阅读全文
0 0
- Google KickStart的一些理解和学习
- 对算法的一些学习和理解
- 关于google protocol buffer(PB)的优缺点和一些个人的理解
- ArrayList的学习和对象之间比较的一些理解
- 对于java反射的一些学习理解和认知
- 学习Shark的一些理解
- 机器学习的一些理解
- commerce kickstart一些运行时错误的解决办法
- mount的一些理解和一些摘录
- 关于composer一些学习和理解
- 关于composer一些学习和理解
- kickstart配置文件详解和system-config-kickstart
- autoyast和kickstart
- kickstart和dhcp
- Espresso学习笔记--google doc前四篇部分翻译和理解
- Android学习笔记---Layout的一些理解
- 对“深度学习”的一些理解
- 嵌入式学习的一些个人理解
- Windows下pygame安装
- 如何在虚拟货币开发区块链上创建私链
- 反向传播
- 洛谷 2507 SCOI2008 配对
- Apache中 RewriteRule 规则参数介绍
- Google KickStart的一些理解和学习
- bzoj3228 [ SDOI2008 ] -- 扫描线 + 线段树
- jQueryEasyUI
- Finding the Radius for an Inserted Circle--2017 ACM-ICPC 亚洲区(南宁赛区)网络赛
- 32位64位操作系统基本数据类型字节大小
- 前端初学学习进程XII
- Pandas数据结构之:Series
- Git
- Minimum Distance in a Star Graph(南宁网络赛)