浅谈分治算法在OI中的应用
分治虽然是基本思想,但是OI中不会出裸分治让你一眼看出来,往往都是结合到找规律里面。
先来个简单的:
奇妙变换 (magic.pas/c/cpp)
【问题描述】 为了奖励牛牛同学帮妈妈解决了大写中文数字的问题,牛牛妈妈特地抽出一个周末的时间带着牛牛来到梦幻儿童乐园游玩。 在游乐园,牛牛看到了一个非常有意思的游戏:游戏一开始,电脑屏幕上只有一个序列“A”,而后的每一次变化都把序列中的“A”变成“AB”,“B”变成“A”。游戏一直继续„„,最后屏幕上得到了序列“ABAABABAABAABABAABA„„”。当然更有意思的是,电脑会提出Q个询问,每次询问:在第m个字符和第n个字符之间有多少个“A”(包括第m、n个字符在内)。 你能帮牛牛解决这个问题吗?
【输入格式】 第一行为一个整数Q,后面有Q行,每行两个数用空格隔开的整数m,n。
【输出格式】 共Q行,每行一个回答。
【样例输入】 1 2 8
【样例输出】 4
【数据范围】 1≤Q≤5000 1≤m≤n≤2^63 保证每次询问时,所询问的区间已经生成。
分析:把数列生成的过程写一写
1 A
2 AB
3 ABA
5 ABAAB
8 ABAABABA
13 ABAABABAABAAB
21 ABAABABAABAABABAABABA
34 ABAABABAABAABABAABABAABAABABAABAAB
……
很容易发现一个规律,那就是第k个序列是由第k-2个序列接在第k-1个序列后面形成的,故元素个数也就是前面两个之和,所以满足斐波那契数列……然后对于第k层的询问[m,n]可以找到当前所在序列的断点mid(即上一个序列的元素个数),分成两部分,[m,mid]传到k-1层,[mid+1,n]传到k-2层处理,至于每层断点可以预处理出斐波那契数列。
——————————————————————————————————————————————————————————————————————
再来道神题……(ZJOI2009)
硬币游戏
描述
Orez很喜欢玩游戏,他最近发明了一款硬币游戏。他在桌子的边缘上划分出2*n个位置并按顺时针把它们标号为1,2,……,2n,然后把n个硬币放在标号为奇数的位置上。接下来每次按如下操作:在任意两个硬币之间放上一个硬币,然后将原来的硬币拿走;所放硬币的正反面由它两边的两个硬币决定,若两个硬币均为正面朝上或反面朝上,则所放硬币为正面朝上,否则为反面朝上。
那么操作T次之后桌子边缘上硬币的情况会是怎样的呢?
格式
输入格式
输入第一行包含两个整数n和T。
接下的一行包含n个整数,表示最开始桌面边缘的硬币摆放情况,第i个整数ai表示第i个硬币摆放在2*i-1个位置上,ai=1表示正面朝上,ai=2表示反面朝上。
输出格式
输出仅包含一行,为2n个整数,其中第i个整数bi桌面边缘的第i个位置上硬币的情况,bi=1表示正面朝上,bi=2表示反面朝上,bi=0表示没有硬币。
样例1
样例输入1[复制]
10 5
2 2 2 1 1 1 1 1 1 2
样例输出1[复制]
0 1 0 1 0 1 0 1 0 2 0 1 0 2 0 1 0 1 0 1
限制
每点1s。
提示
30%的数据 n≤1000 T≤1000
100%的数据 n≤100000 T≤2^60
来源
NOI2009浙江省省选第二试
分析:找规律神题,http://hi.baidu.com/oimaster/item/2313fb22fb9c823795f62b41 JZP博客……
浅谈分治算法在OI中的应用的更多相关文章
- 浅谈Python在信息学竞赛中的运用及Python的基本用法
浅谈Python在信息学竞赛中的运用及Python的基本用法 前言 众所周知,Python是一种非常实用的语言.但是由于其运算时的低效和解释型编译,在信息学竞赛中并不用于完成算法程序.但正如LRJ在& ...
- 浅谈分词算法(5)基于字的分词方法(bi-LSTM)
目录 前言 目录 循环神经网络 基于LSTM的分词 Embedding 数据预处理 模型 如何添加用户词典 前言 很早便规划的浅谈分词算法,总共分为了五个部分,想聊聊自己在各种场景中使用到的分词方法做 ...
- 浅谈分词算法(4)基于字的分词方法(CRF)
目录 前言 目录 条件随机场(conditional random field CRF) 核心点 线性链条件随机场 简化形式 CRF分词 CRF VS HMM 代码实现 训练代码 实验结果 参考文献 ...
- 浅谈分词算法(3)基于字的分词方法(HMM)
目录 前言 目录 隐马尔可夫模型(Hidden Markov Model,HMM) HMM分词 两个假设 Viterbi算法 代码实现 实现效果 完整代码 参考文献 前言 在浅谈分词算法(1)分词中的 ...
- 浅谈分词算法基于字的分词方法(HMM)
前言 在浅谈分词算法(1)分词中的基本问题我们讨论过基于词典的分词和基于字的分词两大类,在浅谈分词算法(2)基于词典的分词方法文中我们利用n-gram实现了基于词典的分词方法.在(1)中,我们也讨论了 ...
- 转:浅谈CSS在前端优化中一些值得注意的关键点
前端优化工作中要考虑的元素多种多样,而合理地使用CSS脚本可以在很大程度上优化页面的加载性能,以下我们就来浅谈CSS在前端优化中一些值得注意的关键点: 当谈到Web的“高性能”时,很多人想到的是页面加 ...
- 【WebApi系列】浅谈HTTP在WebApi开发中的运用
WebApi系列文章 [01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi参数的传递 [04]详解WebApi测试和PostMan [05]浅谈W ...
- 浅谈箭头函数和setTimeout中的this
箭头函数会改变this的指向,这个大家看文档都看到过,可是有没有具体理解呢?我发现自己应该可能大概是......emmmm,然后我整理了一遍,加强一下概念吧顺带再讲一下setTimeout这个函数改写 ...
- 浅谈分治 —— 洛谷P1228 地毯填补问题 题解
如果想看原题网址的话请点击这里:地毯填补问题 原题: 题目描述 相传在一个古老的阿拉伯国家里,有一座宫殿.宫殿里有个四四方方的格子迷宫,国王选择驸马的方法非常特殊,也非常简单:公主就站在其中一个方格子 ...
随机推荐
- javascript 特效实现(2)——回到顶部效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Hadoop Browse the filesystem 无效处理
当我们安装好并正常运行hdfs后输入http://xxxxxxxxx:50070会进入下图所示的页面. 其中Browse the filesystem 是查看文件系统的入口. 但是在发现这个链接一直无 ...
- CBT 简介
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalI ...
- html5 实现video标签的自定义播放进度条
现在随着html5的渐热,越来越多的web开发者都开始选择使用html5写出一些比较好的web应用. html代码: <!DOCTYPE html> <html lang=" ...
- HDU 2487 Ugly Windows
递归求解,代码不太好看,是2013年7月写的 代码: #include<stdio.h> #include<iostream> #include<string.h> ...
- SSO - 我们为何需要单点登录系统
SSO,Single Sign On,也就是单点登录,保证一个账户在多个系统上实现单一用户的登录 现在随着网站的壮大,很多服务会进行拆分,会做SOA服务,会使用dubbo做微服务,或者简单的小型分布式 ...
- 转: __asm__ __volatile__内嵌汇编用法简述
from: http://www.embedu.org/Column/Column28.htm __asm__ __volatile__内嵌汇编用法简述 作者:刘老师,华清远见嵌入式学院高级讲师,AR ...
- 18种CSS3loading效果完整版,兼容各大主流浏览器,提供在线小工具使用
今天把之前分享的两篇博客<CSS3实现10种Loading效果>和 <CSS3实现8种Loading效果[二]>整理了一下.因为之前所分享的各种loading效果都只是做了we ...
- Install MySQL on Mac OS X——MAC安装MySQL
很多关于如何安装MySQL的教程已经过时了,或者比必须的步骤复杂得多.这篇教程将展示如何安装MySQL,启动MySQL,以root用户进入MySQL,以及创建删除退出数据库. Step 1: 下载My ...
- 使用C#改变鼠标的指针形状
1.在一个无标题的窗体中用MOUSEMOVE事件判断鼠标坐标是否到达窗体的边缘,如果是的话将鼠标指针改为可调整窗体大小的双向箭头. private void Form1_MouseMove(o ...