- 博客(339)
- 收藏
- 关注
原创 P1936 水晶灯火灵
https://www.luogu.org/problem/show?pid=1936暴力发现,符合式子的两个数是菲波那切数列的相邻两项。 然后分析是这样的: 记f(n,m)=(n^2-mn-m^2)^2则有f(m+n,m)=[(m+n)^2-n(m+n)-n^2]^2=(n^2+mn-m^2)^2=(m^2-mn-n^2)^2=f(m,n)#include<iostream>#include
2017-08-09 21:20:44 361
原创 Peter的烟
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;int n,k,ans;int main(){ cin>>n>>k; while(n>=k) { ans+=k; n=n
2017-08-09 20:43:31 369
原创 P2614 计算机弹琴
https://www.luogu.org/problem/show?pid=2614 这是一道模拟题,就是细节有点多。 首先,括号里没有 - ,所以是 - 时,直接当成音符处理,又因为没有超过4个节拍的音符,所以遇到‘.’,判断前面是不是 - ,与普通字符分开处理就可以了。#include<iostream>#include<cstdio>#include<cstring>#includ
2017-08-09 20:29:50 400
原创 Codevs 4246 奶牛的身高
Codevs 传送门题目描述 Description 奶牛们在FJ的养育下茁壮成长。这天,FJ给了奶牛Bessie一个任务,去看看每个奶牛场中若干只奶牛的身高,由于Bessie是只奶牛,无法直接看出第i只奶牛的身高,而只能看出第i只奶牛与第j只奶牛的身高差,其中第i 只奶牛与第j只奶牛的身高差为A(i<=n)。当A大于0时表示这只奶牛比前一只奶牛高A cm,小于0时则是低。现在,FJ让Bes
2017-08-09 17:07:57 238
原创 P2192 HXY玩卡片
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int n,num1,num2;int a[1009];int cmp(int x,int y){return x>y;} int main(){ scanf("%d",&n); for(
2017-08-09 15:52:48 341
原创 P2667 超级素数
https://www.luogu.org/problem/show?pid=2667#subn<=100000000,线性筛都不灵了,不过要是考试的话我会选择打表,嘻嘻。 怎么办呢? 我们想一想,符合条件的数一定不多,我们可以选择造一个这样的数。 从高位开始造,只有再加上一位后的数是质数我们才加,所以我们搜索经过的数都符合条件。 时间复杂度也就是不到O(10^6)。#include<ios
2017-08-09 15:47:38 550
原创 P2955 奇数偶数
大大大水题。#include<iostream>#include<cstdio>#include<cstring>using namespace std;int n;char a[100];int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) { cin>>a; int x=a[str
2017-08-09 11:39:25 187
原创 P1554 梦中的统计
有一个大水题!#include<iostream>#include<cstdio>using namespace std;int n,m;int num[11];int main(){ scanf("%d%d",&n,&m); for(int i=n;i<=m;i++) { int x=i; while(x) {
2017-08-09 11:27:19 1670
原创 P1151 子数整数
大水题!#include<iostream>#include<cstdio>using namespace std;int k;int main(){ scanf("%d",&k); int flag=0; for(int i=10000;i<=30000;i++) { int a,b,c; a=i%1000;
2017-08-09 11:14:39 1287
原创 Codevs 1391 伊吹萃香/虫洞
Codevs 传送门 解法:因为这道题中颜色在一直变化,所以要用到一个分层图的做法。 因为颜色来回变,所以我们用0 , 1 来表示当前的时间。当时间是0时,所有点的颜色与起初一样;当时间为1 时,所有点的颜色就与起始时相反了。 用spfa来跑最短路时,交叉松弛, 我们用dis[ ][0] 来松弛dis[ ][1] , 用dis[ ][1]来松弛dis[ ][0] 。 具体处理方法在代码的注
2017-08-09 11:04:32 385
原创 P1414 又是毕业季Ⅱ
luogu 传送门我们枚举1~maxn每个数 i ,求出它的倍数的个数cnt,那么cnt就是以 i 为最大公约数时数的个数, 那么 i 就可能作为从1~cnt 的答案,对ans取max就可以了。时间复杂度O(inf*√inf).#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algori
2017-08-08 21:25:57 321
原创 P1379 八数码难题
luogu 传送门bfs,像输入一样我们用一个数来表示状态,因为不能开一个9位的数组,又因为如果数的八位确定,那么最后一位就能确定,所以我们可以开一个8位的数组来记录这个状态是否进过队。重点是将0与其它位转换,基于九宫格的特点,我们只能将0与和它相距 1 -1 3 -3 位的数字交换,下面是数位交换的原则: 1. 要得到第x位前面的部分:/10^x 2. 要得到第x位后面的部分:%10^(x-
2017-08-08 20:05:16 895
原创 Codevs 2594 解药还是毒药
Codevs 传送门我们可以用二进制数来表示状态(状态压缩),1代表患病,0代表不患病。 把每一种药对人的影响分别用两个数记录下来: 对于治病,我们用0代表治病,1代表无影响,我们与当前状态做一下 and运算,就把病治好啦。 对于患病,我们用1代表患病,0代表无影响,我们与当前状态做一下或 | 运算,就把病患上啦。用bfs不断拓展,直到人的状态为一串0就可以啦。#include<iostre
2017-08-08 17:00:10 409
原创 P2327 [SCOI2005]扫雷
https://www.luogu.org/problem/show?pid=2327 对于这道题,我们如果知道了第一个位置有没有雷,就可以根据这个信息来判断下面位置有没有雷。 所以答案只有三种:0 , 1 , 2 根据第i个位置和第i-1位置有没有雷,就可以推出第i+1位置的雷的个数,如果雷的个数不是0或1, 那么这种情况就不符合。#include<iostream>#include<c
2017-08-08 15:18:06 324
原创 互不侵犯King
https://www.luogu.org/problem/show?pid=1896 这是一道状压dp题。It`s the first time that I had accepted a zhuangya dp problem! 把一行每一位放与不放用二进制中的01表示,状态压缩就是将一行的状态用一个二进制数表示。 解法在代码的注释中:#include<iostream>#include
2017-08-08 11:29:14 417
原创 P1092 虫食算
https://www.luogu.org/problem/show?pid=1092好一道搜索题! 一开始我自己写了一个史上最无脑的搜索,结果只得了10分,全部TLE掉。参考了题解,才发现自己的暴力搜方法不太对,我是枚举数的每一位是每一个数。。。就是好无脑,不超时才怪。参考了题解(有些题解有太多太多的剪枝,好像处理得太过繁琐,我参考的题解简单易懂),叙述一下法。 我们可以这样来搜索:我们记录每
2017-08-07 21:14:59 730 1
原创 P1120 小木棍 [数据加强版]
枚举最小长度(从max–>sum),用dfs来判断,如果能成功就可以,退出即可。 dfs中有好多高深的剪枝!! 先将长度降序排序,便于剪枝。剪枝: 判断当前的len时 1).如果在前面已经建造这一根长木棒的一部分的基础上如果这跟小木棒不能成功,那么和它长度相同的一定也不成功。 2).如果正好这跟小木棒再放上能够建成一根长木棒,而且不成功,那么当前枚举的长木棒len就一定不能成功,retur
2017-08-07 17:16:09 552
原创 P1378 油滴扩展
https://www.luogu.org/problem/show?pid=1378 思路简单的搜索题。 但是!这题真的是让我挠心啊! 请看注释的那两行,为什么!!(表示被这样坑了一天)#include<iostream>#include<cstring>#include<cstdio>#include<algorithm> #include<cmath>#define PI 3.
2017-08-07 11:03:41 698
原创 P1514 引水入城
https://www.luogu.org/problem/show?pid=1514先用dfs搜索,从最上面的一行往下拓展,所有点拓展完后,扫描最后一行是否有没被染上色的,有则说明 不能满足要求; 如果没有,在用dfs,计算出最上面一行的每个点(大于等于两边的点)能拓展到的最左端和最右端,然后就转化成了区间覆盖问题。区间覆盖问题是给你几个区间,然后给你一个大区间,用尽量少的小区间来覆盖大区间。
2017-08-06 20:52:31 325
原创 线段树模板(区间乘混加)
https://www.luogu.org/problem/show?pid=3373#include<iostream>#include<cstring>#include<cstdio>#define M 100000#define LL long longusing namespace std;struct H{ LL sum,l,r,len,addi,tim;}st[4*
2017-08-06 10:03:35 447
原创 P2161 [SHOI2009]Booking 会场预约
https://www.luogu.org/problem/show?pid=2161题意简析:你需要写一个数据结构,维护一个时间轴,支持如下操作:1)插入1个新区间,删除所有时间轴上与它有交的区间并输出个数。2)查询当前时间轴上的区间个数。我们可以用线段树来做(借鉴了sxb大神的代码)。离线处理。用线段树存序号的最小值。 当我们倒着插入第i号区间之前,在线段树里取最小值,那么当前插入的这个区间会
2017-08-05 21:13:54 443
原创 P1821 [USACO07FEB]银牛派对Silver Cow Party
https://www.luogu.org/problem/show?pid=1821大体描述一下题意:一张图,边为有向边,给出一个点 s,求其它点最大的从 x 到 s 和从 s 到 x 的最短路之和。机智的做法:我们可以跑两遍spfa,先跑出 s 到其它点的最短路,在将所有边反过来,再对 s 跑一边spfa, 那么第二遍求的就是其它点到 s 的最短路径。 是不是很机智呢 QAQ#include
2017-08-05 20:48:06 543
原创 P1083 [NOIP 2012]借教室
https://www.luogu.org/problem/show?pid=1083#sub一开始容易想到的方法是线段树,每次修改时,如果出现负数,那么当前这个人一定不能满足了。 但是在noip里,这肯定不是正解,所以会超时那么一两个点。#include<iostream>#include<cstdio>#include<cmath>#include<stdlib.h>#define M
2017-08-05 15:55:50 212
原创 数轴染色
http://codevs.cn/problem/1191/ 这个数据范围是要nlogn的做法嘛。 线段树:一开始把数组全设为1,建一下树,然后修改的时候把白球全修改成0,每次用线段树求和就好了。 不过我确实调了一个上午啊。感谢sxb大神帮我找错#include<iostream>#include<cstdio>#define M 200000#define LL long longu
2017-08-05 11:24:10 282
原创 P1168 中位数
https://www.luogu.org/problem/show?pid=1168#sub用上c++的stl中的优先队列,小根堆用负值来存,就变成了一道水题。#include<iostream>#include<cstring>#include<string>#include<cstdio>#include<cmath>#include<algorithm>#include<queu
2017-08-04 21:23:36 368
原创 P3144 [USACO16OPEN]关闭农场Closing the Farm
https://www.luogu.org/problem/show?pid=3144#sub 分析:按顺序去掉点后查询图是否还是联通的,那么我们就可以按照删除的顺序倒着加点。 在加某个点之前判断图是否是联通的,即按顺序去掉这个点后图是否是联通的。 具体的处理方法:根据输出要求,我们可以先把最后一个去掉的点加进图中;然后在倒着放入其它点 (第i个点)之前先判断当前图是否是联通的,将答案存入a
2017-08-04 20:41:31 474
原创 毁灭
对图染色。但是一个个地染会超时O(n^3),显然我们要用O(n^2)的做法。 因为我们对每一行的染色是一段区间的操作,所以我们可以用差分来做。枚举弦心距(0~r,一定是0~r),求出弦长,根据圆心的坐标,可以求出这一行的左右端点,就可以对这段区间进行差分了。时间复杂度: O(n^2)。#include<iostream>#include<cstring>#include<string>#i
2017-08-04 16:12:42 192
原创 P1631 序列合并
https://www.luogu.org/problem/show?pid=1631#sub做法: 将 a 和 b 都从小到大排一遍序。 然后组成这样一个矩阵: a1+b1 , a1+b2 , a1+b3 , …… , a1+bn a2+b1 , a2+b2 , a2+b3 , ……,a2+bn a3+b1…… …… …… an+b1 , an+b2 , an+
2017-08-04 15:38:46 352
原创 poj 1984 Navigation Nightmare
http://poj.org/problem?id=1984这是一道经典的带权并查集,每插入一个点,维护两个权值的数组,代表关于根节点的x坐标和y坐标, 记录这两个权值数组就可以了。W是x减,E是x加,N是y减,S是y加。 合并时,注意一些细节。(注意我们输入的是x和y之间的距离,记录的是ry到rx的距离,加减法要做好)#include<iostream>#include<cstring>#
2017-08-04 14:57:59 285
原创 poj 1850 code
http://poj.org/problem?id=1850首先应该判断一下给出的字符串是否为升序,否则答案为0. 对于长度为L的一串,我们首先应该加上比它短的串的个数,然后再算它是长度为L的里面的第几个。 在算长度为len的串的个数的时候,因为都是升序的,特定的几个字符组成的串没有重复,所以我们可以 用组合数来算,个数为C(26,len)。 然后再算它是长度为L的串的第几个时,一位一位地算
2017-08-04 08:36:30 183
原创 逆序对
https://www.luogu.org/problem/show?pid=1908 做法:O(nlogn) 每次加入一个数,把当前输入进的数中比这个数大的数求和,用树状数组b来维护,b[i]表示的是 i~i+lowbit(i) *的个数和*,每输入进一个数,就把b数组更新.#include<iostream>#include<cstring>#include<cstdio>#incl
2017-08-03 18:00:55 216
原创 不要把球传给我
这是一个组合数问题,因为只能是升序,那题目就是在问你:C(3,j-1)是几。#include<iostream>#include<cstring>#include<cstdio>using namespace std;long long ans=1,j,p=1;int main(){ scanf("%lld",&j); ans=1ll*ans*(j-1)*(j-2)*(j
2017-07-28 16:23:57 320
原创 阅读计划(book)
问题描述 暑假到了,Rick制定了一个长达M天的阅读计划。他一共有N本书,从1至N进行标号;Rick将它们从上至下摞成一堆。他每天都会读一本书,假设他要读编号为X的书,他会按照以下步骤: 1. 将这本书上方的所有书搬起来 2. 将这本书拿出来 3. 将搬起来的书摞回去 4. 看完后把这本书放到顶端 每本书都会有各自的重量,Rick不希望搬起太过重的书。于是他希望能重新安排这N本书的顺序,
2017-07-28 14:30:26 2723
原创 循环移动(cyclic)
问题描述 给出一个字符串S与N个操作。每个操作用三元组(L, R, K)进行描述:操作将字符串第L个到第R个位置构成的子串循环移动K次。一次循环移动就是将字符串最后的这个字符移动到第一位,其余的字符顺次后移。 例如,对于字符串abacaba,操作(L=3, R=6, K=1)后得到的字符串即为abbacaa。 求出在N个操作后得到的字符串。输入格式(cyclic.in) 第一行一个字符串S。
2017-07-28 10:45:03 784
原创 摄像头
https://www.luogu.org/problem/show?pid=2712 拓扑排序嘛。每次找入度为零即没有被观测的摄像头砸掉,再把它所观测的摄像头的入度-1. 不过此题有一个特别坑的地方,就是摄像头的编号并不是1~n。#include<iostream>#include<cstring>#include<string>#include<algorithm>#includ
2017-07-27 16:07:52 253
原创 乒乓球
问题描述 Gob和Michael常在一起打乒乓球。他们是这样决定比赛的输赢的:比赛由若干大局组成;谁最先赢下s大局谁就获得比赛的胜利;在每一大局中,谁先得t分就获得本大局的胜利。在一次比赛中,他们只记录了比赛中的每一分是谁得的,但忘记了记录s和t。现在给出比赛的每一分的得分情况,求出所有可能的s和t。Gob保证,得分表是完整的,也就是在比赛恰好在最后一人,得到最后一分后结束。输入格式(game.i
2017-07-27 15:31:06 659
原创 电梯(lift)
问题描述(1S, 128M) 无所事事的Cinzo决定用坐电梯的方式来打发时间。他住在一个N层的房子中,最底下为1层,最高处为N层。他从他家所在的第A层出发,并决定连续坐K次电梯。 但由于迷信的缘故,B在中国被视为是不幸运的,所以整座楼并没有第B层。也是因为这个原因,如果Cinzo想从第X层出发到达第Y层,他希望Y能满足|X - Y| < |X - B|。 每次电梯到达后,Cinzo都会将电梯
2017-07-27 15:06:41 631
原创 毕业考试
问题描述 快毕业了,Barry希望能通过期末的N门考试来顺利毕业。如果他的N门考试平均分能够达到V分,则他能够成功毕业。现在已知每门的分数不能够超过R;他的第i门考试目前得分为Ai,如果想要在这门科目增加一分则需要多写Bi篇论文。Barry想知道,如果想要毕业的话,他最少需要写多少篇论文?输入格式(exam.in) 第一行三个整数,N, R, V,分别代表考试科目数,每门考试的最高分,需要达到的
2017-07-27 14:39:22 286
原创 P1979 [NOIP]华容道(70分的暴力)
https://www.luogu.org/problem/show?pid=1979 用裸的bfs写到了70分。 记录状态可以记录当前指定棋子的位置和空白格子的位置,还有一个步数(用结构体最好啦)。 直到指定棋子的位置到了目标格子时,就可以停止了。要注意空白格子可能与指定棋子换位置。70分的暴力代码#include<iostream>#include<cstring>#include<s
2017-07-27 09:23:20 826
原创 生日蛋糕
https://www.luogu.org/problem/show?pid=1731 是一道搜索题,重点在于剪枝。 具体写在代码中#include<iostream>#include<cstring>#include<string>#include<algorithm>#include<cstdio>#include<cmath>using namespace std;int n
2017-07-27 09:18:05 1292
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人