自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(227)
  • 收藏
  • 关注

原创 线段树总结

之前做了些线段树相关的题目,开学一段时间后,想着把它整理下,完成了大牛NotOnlySuccess的博文“完全版线段树”里的大部分题目,其博文地址Here,然后也加入了自己做过的一些题目。整理时,更新了之前的代码风格,不过旧的代码仍然保留着。      同样分成四类,不好归到前四类的都分到了其他。树状数组能做,线段树都能做(如果是内存限制例外),所以也有些树状数组的题目,会标示出来,并且放到其

2012-11-27 00:38:56 25162 22

原创 后记

后记目录为什么要做一把蓝牙机械键盘用到的东西制作左手设置左右手蓝牙BLE制作右手轴体焊接及供电模块后记一些想法我觉得外壳的分层的设计挺好的, 可以单独对某些层做特别的定制, 除了成本方面的考虑之外, 比如对右手有装摇杆需求的, 就可以仅向右手上面两层做一些修改, 使得摇杆能够放下. 那么可以更进一步, 除了PCB板和定位板是焊死的 (这块拆起来比较麻烦, 需要用吸锡器清理38个焊点), 在现在的设计里, 所有的连线都没有焊死, 用的是杜邦线进行连接, 意味着如果你想用其他的充电模块

2021-02-08 16:30:38 419 1

原创 轴体焊接及制作供电模块

轴体焊接及制作供电模块目录为什么要做一把蓝牙机械键盘用到的东西制作左手设置左右手蓝牙BLE制作右手轴体焊接及供电模块后记在前面的章节里, 硬件和软件都验证完成了, 接下来就可以把轴体焊接上去, 把供电模块加上去了.如果你使用的时阳极铝定位板, 在焊轴之前, 最好把下面的二极管焊接点, 用黑胶布粘上. 避免阳极铝导电, 而造成的奇怪的现象.在焊轴之前, 先把卫星轴安上去, 调试一下, 因为如果没有安装好, 会很影响手感.然后把轴焊上去.然后拿出一块TP4056充电模块, 拿

2021-02-08 16:30:13 861

原创 制作右手

制作右手目录为什么要做一把蓝牙机械键盘用到的东西制作左手设置左右手蓝牙BLE制作右手轴体焊接及供电模块后记在前面的章节里, 我们完成了左手的焊接, BLE的设置, 接下来开始制作右手, 右手会负责接受左手键盘发过来的信息, 摇杆信号的变化, 右手键盘的事件, 控制LED灯, 还负责跟电脑打交道. 可以用下图表示整个键盘各种模块之间的关系.为什么要加一个MCP23017呢?可以从上图看到, 右手的Arduino Pro Micro要负责的事情很多, 但是IO引脚数目有限, 如果像左

2021-02-08 16:26:52 328

原创 设置左右手蓝牙BLE

设置左右手蓝牙BLE目录为什么要做一把蓝牙机械键盘用到的东西制作左手设置左右手蓝牙BLE制作右手轴体焊接及供电模块后记BLE跟普通蓝牙相比, 功率低, 成本低, 所以用来做左右手数据的传输.在前一章, 我们已经把左手的PCB焊接好了, 现在我们开始设置左右手的HM-10, 让两块HM-10在上电之后, 能够自动连接, 并且左手的HM-10将数据发送给右手的HM-10(即设置主从模式).设置HM-10需要用串口发送AT指令. 如果你有USB转TTL的线, 并且使用的是windows

2021-02-08 16:24:22 481 1

原创 制作左手

制作左手目录为什么要做一把蓝牙机械键盘用到的东西制作左手设置左右手蓝牙BLE制作右手轴体焊接及供电模块后记理论说明怎么样让左手的Arduino Pro Micro检测到哪一行, 哪一列的按键被按下或者松开了(即状态跟之前的不一样)呢?我们先介绍一下主控芯片的功能.Arduino Pro Micro这块芯片有18个IO引脚, 其中所有的IO引脚都支持输入输出数字信息(就是0和1, 输出模式可以设置高电压或者低电压, 输出高电压就相当于电源, 输入模式可以读取当前电压高低), A0-

2021-02-08 16:22:16 441 1

原创 用到的东西

用到的东西目录为什么要做一把蓝牙机械键盘用到的东西制作左手设置左右手蓝牙BLE制作右手轴体焊接及供电模块后记硬件相关焊接工具电烙铁烙铁架高温海绵: 在水中充分浸泡, 挤干后放置在烙铁架焊锡松香: 助焊剂, 焊出来的点比较亮, 不容易虚焊吸锡枪: 如果焊坏了, 将焊点的焊锡吸走, 重新焊电工黑胶带: 有时候用胶带辅助固定比较好焊PCB板等PCB板: github上有PCB图纸ErgoDone, 需要找淘宝店打印, 用软件kicad打开具体的文件查看PCB图纸

2021-02-08 16:16:20 901

原创 为什么要自己做一把蓝牙机械键盘

为什么要做一把蓝牙机械键盘目录为什么要做一把蓝牙机械键盘用到的东西制作左手设置左右手蓝牙BLE制作右手轴体焊接及供电模块后记下面是一系列文章, 讲怎么自己做一把蓝牙版的ergodone键盘.背景为什么要做这样一把键盘呢?因为我是程序员, 也是vim的使用者, 现在在用的是mac系统, 更喜欢用键盘来进行一些操作, 不喜欢把手移动到鼠标上进行一些操作, 再移到回键盘上. 除了可以用软件或者系统的快捷键, 现在很多环境下, 都有vim的插件, 比如chrome的浏览器有Vimium,

2021-02-08 16:09:20 1473 4

原创 hdu 4777 Rabbit Kingdom

题意:给N个数,有M个查询,问区间[L,R]之间有多少个数与这个区间内的其他数都互质。易得,一个区间内的数的个数减去,与其他数不互质的数即可——即离当前数i左边最近的不互质的数的位置(设为L[i])和右边最近的不互质的数的位置(设为R[i])有一个在区间[L,R]内。那么问题就变成统计:1.区间[L,R]中有多少个数的L[i]或R[i]在区间[L,R]内。2.多少个数的L[i]且R[i]在区间

2013-11-11 21:14:51 4497

原创 URAL 1989 Subpalindromes(字符串HASH&线段树单点更新)

题意:给你长度为N的字符串,有M个操作,操作有两种类型(1)“change i a”,表示将第i个字符变成a,(2)“palindrome? j k”,询问[j,k]的字符串是否构成回文串。从0到N-1HASH一次,到从N-1到0HAsH一次,判断的话,直接判断两次HASH后的结果是否相同,保险相见,用了双HASH。#include #include #include using

2013-11-10 22:38:56 3872

原创 URAL 1977 Energy Wall(成段更新)

题意:有N(Ni-d+2和点i+d-2加上值2*X……并且,最后所有数加上的X的和等于tot,这个操作之后,tot清零。可知,操作(2)的话,可以看成加上两个等差数列,一个递增一个递减,对于每过一段时间就会所有数就会增加值,也可以表示成加上等差数列。需要注意的时,因为点的数目为10^9,所以要对操作的点离散化,比如有10个点,离散化之后有1、2、7、10。当操作的区间是[2,7]时,中

2013-11-10 22:28:19 3088

原创 Codeforces 343D Water Tree

题意:一棵树有N个节点,有三种操作(1)“1 v",表示将以点v为根节点的子树全部赋值为1,(2)"2 v",表示将点v以及点v的所有祖先节点全部赋值为0,(3)"3 v",表示查询点v的值。将树型转线性之后,我用了两棵线段树去维护这两种操作,明显可知的是,点v的子树里有一个点进行了操作(2),并且点v进行操作(1)(如果有)的时间早于操作2,那么点v的值就为0,在线段树里维护好每个操作的时间

2013-09-27 16:56:36 3718

原创 ZOJ 3724 Delivery(离线线段树)

题意:N个点,对于每个点i,都有一条连向i+1的有向边,另外有M条其他的有向边,有Q个询问(U,V)求U到V的最短路。当UV的处理方法很相似。分两种情况,分别离线处理一次就可以了。//#pragma comment(linker, "/STACK:102400000,102400000")#include #include #include #include #include

2013-09-23 23:31:59 3665

原创 ZOJ 3525 Disappearance(扫描线)

题意:有三维的空间里有N个点(N因为N只有5000,起先我们的方法是暴力去枚举两维,即按X排序,找出点彼此间距离不超过LB的点,然后将这些点按Y排序,在线段树中放进Y之间最大距离不超过LW的点。。但是这样死活过不了。。最后枚举一维,直接按X排序,然后就是poj 2482的做法了。。#include #include #include #include #include usi

2013-09-18 22:21:16 3308

原创 hdu 4747 Mex

题意:给你N个数,枚举所有的L和R,问由区间[L,R]之间的数构成的集合里,哪一个数字没有出现,如果有多个,找出最早的一个,设其为x,求所以x的和。如果固定R,设R这个位置的值为Key[R],可以发现整个x数列是递减的,随着R的左移,可以从当前的R到前一个Key[R]出现位置之间的X,都不应该大于R,如果发现了这个性质,就是一个简单的成段更新了。#include #include

2013-09-18 22:11:37 3826 1

原创 ZOJ 3521 Fairy Wars(扫描线)

题意:平面上有N个子弹,每个子弹的坐标已知,现在在距离点x0,y0为R的圆内,所以的子弹都会变成冰块L*L,并且在L*L范围内的所有其他子弹也会变成冰块,问,当连锁反应结束时,变成冰块的子弹数有多少。也就是说落在子弹L/2的范围内的子弹都会结冰,也可以转化成只要边界在子弹L/4范围内的子弹会结冰,这样扫描线就可以搞定了。#include #include #include #in

2013-09-18 22:02:44 3129

原创 Codeforces Beta Round #27 D. Ring Road 2

题意:有一个环,现给你一些区间的起点与终点,区间可以在环内,可以在环外,但是在环内环外的区间都不能彼此相交,问可能否,如果可能,输出方案。2-SAT。#include #include #include #include #include #include #include #include #include using namespace std;typedef

2013-09-17 23:47:17 2734

原创 hdu 4419 Colourful Rectangle(扫描线)

题意:给你10000个三种颜色的矩形,不同颜色的矩形相互覆盖会形成不同的颜色,问形成的七种颜色的面积是多少。扫描线。线段树的每个节点里维护好七种颜色的长度。直接暴力跑一次即可。#include #include #include #include #include #include using namespace std;#define LL(x) (x<<

2013-09-13 10:21:08 2950

原创 Codeforces Beta Round #11 D. A Simple Task

题意:有N(最多19个)个点,M条边,问有多少个简单环。状态压缩,dp[st][i],终点是i,st表示这个环走过哪几个,定义起点为这些走过的点里最小的。#pragma comment(linker, "/STACK:102400000,102400000")#include #include #include #include #include #include #incl

2013-09-07 01:53:26 2869

原创 hdu 4114 Disney's FastPass

题意:游戏园里有N个区域,有M条边连接这N个区域,有K个要访问的景点。对于每个景点告诉你这个景点所在的区域,要访问这个景点需要等待一定时间,如果没有FastPass,等待时间有Ti,否则等待时间为FTi,接下来的Ni,表示有Ni个区域可以得到这个景点的FastPass,问从区域1出发,再回到区域1所需要的最少时间。状态压缩,dis[i][s1][s2],表示当前走到这个点,s1表示拿到了哪些景

2013-09-06 20:50:42 3432

原创 hdu 4453 Looploop(Splay或者三个双端队列)

题意:有N个数字围成一个圈,有M个操作,操作类型有六种:(1)“add x",从当前指针位置开始的顺时针K2个数加上x。(2)"reverse",翻转,从当前指针指针位置开始的顺时针的K2个数。(3)"insert x",在当前指针位置的顺时候方向插入一个数x。(4)”delete“,删除当前指针所指的数。(5)"move x”,如果x=1,指针逆时针旋转,如果x=2,顺时针旋转。(6)“quer

2013-09-05 01:33:56 3272

原创 Codeforces Beta Round #89 (Div. 2) E. Bertown roads

题意:有N个点,M条无向边,决定每条边的方向,使得图中任何一个点都能到达其他点。起先起着如何去决定每条边的方向,无果,最后发现其实只要dfs一次就可以,挺有意思的一道题。#include #include #include #include #include #include #include #include #include using namespace std;

2013-09-04 10:37:26 2631

原创 hdu 4286 Data Handler(Splay)

题意:给你一串数字,左右指针的位置,有五种操作,左右指针的左移右移,删除左指针右边的数,删除右指针左边的数,翻转两个指针之间的数。Splay搞过去了。。T了几发是因为,删除的时候,可以把要删除的那个点转到根结点,删除根结点,合并两个子树,然后这样就T了,换了个姿势就过了。。C++扩栈不解释。。#pragma comment(linker, "/STACK:102400000,1024000

2013-09-03 00:38:19 2748

原创 hdu 4699 Editor(Splay)

题意:对一个数列进行操作,光标位置后面插入一个权值为x的数,删除光标前的那个数,光标左移一位,光标右移一位,求到k位置的最大的前缀和。Splay在比赛的时候写得太Navie,T了整场。左移和右移的操作就不说了,删除点的操作是,直接把第pos个点旋转成根结点,然后把这个点删除,将左右两个儿子(如果有)合并成一棵新的树。插入的时候,将pos个点旋转成根结点,然后在根和根的右儿子之间插入这个点。

2013-09-02 01:22:33 2907

原创 hdu 4622 Reincarnation(字符串Hash+线段树)

题意:给出一个字符串,最长2000,Q个询问,每次询问[L,R]区间内有多少个不同的字串。可以用后缀自动机做,也可以先把字符串Hash成一个个整数,转化成求一个区间内不同的整数个数。用Trie树Hash超内存了。。#include #include #include #include using namespace std;typedef unsigned int uint;

2013-09-01 19:27:17 3621

原创 Splay Tree(伸展树)[NOI2005]维修数列

伸展树        概述:不同于线段树的以空间换取时间,用多余的节点去存储多余的信息,来达到降低时间复杂度。SplayTree基于一种更简单的思想,为了使整个查找时间更小,被查频率高的那些条目就应当经常处于靠近树根的位置。于是想到设计一个简单方法,在每次查找之后对树进行重构,把被查找的条目搬移到离树根近一些的地方。SplayTree应运而生。SplayTree是一种自调整形式的二叉查找树,它

2013-08-13 09:25:51 3260

原创 hdu 4455 Substrings

题意:给定一个整数串,有Q组询问,问这个串中长度为W的子串中不同的数字之和为多少。可以DP做,也可以用树状数组做。假设当前的数是a[i],如果它前面也出现了a[i]',那么a[i]'不计,计入的是a[i],如果a[i]后面出现了a[i]'',那么a[i]不计,计入的是a[i]''。定义a[i]前面的空位是bef,后面的空格是aft,则W在1-min(bef,aft)这段区间内的,a[i]的是要

2013-08-13 08:27:42 3133

原创 URAL 1855 Trade Guilds of Erathia

题意:有N个城市,M个操作。城市形成一条链,下标分别从1到N,相邻城市有一条道路相连,初始通过每条道路的费用为0。有两种类型的操作,(1)"change a b d",表示从城市a到城市b之间的每条道路的费用改变d(如果d大于0,增加,反之减少)。(2)"establish a b",表示查询在城市a到城市b之间任意选两个城市作为道路的起点和终点,问通过这些道路的平均费用。        设当

2013-08-13 02:31:40 3341

原创 hdu 4578 Transformation

题意:给你一个数组,初始值为零,有四种操作(1)"1 x y c",代表 把区间 [x,y] 上的值全部加c(2)"2 x y c",代表 把区间 [x,y] 上的值全部乘以c(3)"3 x y c" 代表 把区间 [x,y]上的值全部赋值为c(4)"4 x y p" 代表 求区间 [x,y] 上值的p次方和1因为P只有1到3,(x+c)^2=(x^2)+(2*x*c+c^2)

2013-08-13 01:59:41 2948

原创 hdu 4638 Group

题意:给你一个1~N的排列,问区间[L, R] 之间有多少段连续的数。比如区间里有3、1、2、5、6,这五个数,那么就有3、1、2和5、6这两段。        离线处理每个查询,遍历每个点,设当前处理的区间终点为R,处理每个查询的时候,首先假设所有的数a[i]都是自己独立成段,如果有a[i]+1,或者a[i]-1的数在区间[L,R]内,那么它肯定不是独立成段的,也就是我们要减去在[L,R]内

2013-08-13 01:37:10 2572

原创 hdu 4630 No Pain No Game

题意:给出一个N和1到N的某个排列,询问Q次,每次询问[L,R]区间内任意挑两个数,最大公约数的最大值是多少。       离线处理每个查询,从左到右依次处理每个点,对于处理到的区间端点R,依次枚举R的因子,如果这个因子出现过,那么就将这个因子出现过的上一个位置,赋值为这个因子(当然,也要取较大值),同时,更新这个因子出现的位置为端点R。那么问题就转化成求终点在R的区间中最大值是多少了。#

2013-08-13 01:12:22 1622

原创 hdu 4614 Vases and Flowers

题意:给定一个区间[0,N-1],初始时每个位置上的数字都是0,有两种操作,1.在位置A开始寻找F(如果没有这么多,则有多少个就找多少个)个数值为0的位置,把位置上的数修改为1,并返回第一个和最后一个修改的位置。2.查询区间[A,B]内1的个数,并把区间[A,B]每个位置上的数修改为0。        对于操作2,直接应用区间更新的懒操作就可以了,而对于操作1,我们可以查询上区间[0,A-1]

2013-08-13 01:00:11 1927

原创 hdu 4605 Magic Ball Game

题意:有T组测试数据,N表示这棵树有N个点,下一行的N个数,表示每个点的权值W,M表示边的关系,接下来的M行,每行有三个数字,u,b,b,表示点a和点b分别是点u的左儿子和右儿子。Q表示查询数,接下来的Q行,每行两个数字,v和X。一个权值为X球从根节点开始下落,每落到一个节点的时候,1.如果X=W[i],或者没有儿子节点了,球停止下落。2.如果XW[i],球有1/8的概率落到左儿子,有7/8的

2013-08-13 00:45:42 1451

原创 hdu 4533 威威猫系列故事——晒被子(成段更新)

题意:给你N个矩形,每个矩形给出左下角坐标,右上角坐标,有M个询问,每个询问给出一个时间t,问(0,0),(t,t)的范围内矩形的面积和(重叠的也算)。用树状数组去维护A*t*t+B*t+C这个式子的A,B,C三个系数,维护在不同的t时,ABC分别应该为多少。分成三个阶段。在这个阶段,计算面积的公式为(t-x1)*(t-y1),因式分解之后,得到三个系数的值。这种情况是max(

2013-04-30 15:36:09 2501

原创 srm575_div1&2_1000(网络流)

题意:给你一个N*M的矩阵,矩阵上的空位用'.'表示,非空位'X'表示。用L型的东西放进矩阵里,问最多能放多少个。每个L型的物体可以随意旋转90度。  物体之间不能相互覆盖。不能覆盖那些已经有X的格子。每个L型的转角必须是黑色的格子。一个格子是黑色,它的定义为,i+j是偶数 。如果数据范围小的话,用当前列的去更新下一列的,当前列可能对应着不同的方格占据方案,那么利用

2013-04-30 14:46:15 995

原创 fzu 2105 Digits Count(成段更新)

题意:给你N个数,有四种操作。(1)"AND opn L R",表示对区间[L,R]内的数全部与opn进行且(&)操作。(2)"OR opn L R",表示对区间[L,R]内的数全部与opn进行或(|)操作。(3)"XOR opn L R",表示对区间[L,R]内的数全部与opn进行异或(^)操作。(4)"SUM opn L R",求出区间[L,R]的数的和。注意到给出的N个数的和opn的范围

2013-04-30 13:56:10 2448 3

原创 hdu 4338 Simple Path

题意:有N个点,M条边,下面M行给出M条边后,有Q个询问,给你两个点,起点s,终点t,问从起点s到终点t的简单路径中(简单路径没有环),不包括图中的哪些点,如果s和t重合,那么就输出N-1,如果s无法到达t,输出N,否则输出路径中不包括的点的个数。用点双连通分量建图(割点可以在不同的块中),然后求LCA。比如对于这样的图:拿割点和点双连通分量建图后:

2013-04-30 13:43:11 1686

原创 ZOJ 3299 Fall the Brick(成段更新)

题意:有n排板砖,m个木板,边界的l和r的n列板砖从天上掉下来,然后有m个边界的a,b的高度为h的木板去接那些板砖,一排板砖中的部分板砖如果掉到木板上就停止下落,剩下的继续下落,问最后每块木板上有多少块板砖。        开结构体去存储线段树中节点的信息MLE了。。        按木板的高度,从低到高,去更新线段树节点对应的木板的编号。        板砖落下时,将对应区间的覆盖次

2013-03-30 01:59:24 1721 1

原创 Codeforces Beta Round #99 (Div. 1) C Mushroom Gnomes - 2(单点查询)

题意:有n棵树,m个蘑菇,每棵树有坐标a,高度h,向左边倒的概率,向右的概率(概率用0-100表示),向左倒范围[x-h,x)内的蘑菇被破坏,向右倒范围(x,x+h]范围内的蘑菇被破坏。每个蘑菇有坐标b,及它的魔力值z。        问树倒下后,所以蘑菇的魔力值的和的期望。        离散化之后,成段更新,即树倒下范围内的区间全部乘以倒向这边的概率。最后遍历每个蘑菇的存活的概率乘以它

2013-03-30 00:54:27 1650

原创 Codeforces Beta Round #35 (Div. 2) E. Parade(成段更新)

题意:给你n个建筑的楼顶的高度,以及楼顶的左坐标l,右坐标r(可以看成是线段),问整个建筑的轮廓的转折点。        易得,当两个建筑和交叉的部分时,那么显现出的轮廓的,一定是比较高的那个建筑,那么我们在线段树中放下每个线段,重叠部分取较大值,然后遍历线段树中的每个叶子结点,如果与前一个结点的高度不同,那么就一定是出现了转折。        l与r很大,要用离散化。#inclu

2013-03-29 16:58:05 1739 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除