09 2017 档案
摘要:寻找最美的你(select) Time Limit:2000ms Memory Limit:128MB题目描述 LYK带着悲伤行走在黑暗里。寂穆的夜空没有星月的点缀,身旁的树木、房屋、万事万物连同你自己,都融于宇宙的虚无缥缈之中。黑暗,压抑、膨胀、严严实实包围整个世界,LYK害怕...
阅读全文
摘要:木棍(stick) Time Limit:1000ms Memory Limit:128MB题目描述 LYK有很多木棍,具体的,总共有n根,且每根木棍都有一个长度。为了方便起见,我们可以用一个正整数ai表示第i根木棍的长度。 LYK有一把小刀,但这把小刀由于削木棍很不方便,对于一...
阅读全文
摘要:给定一个数S,找任意个正整数a1,a2,…,an,使得它们的和恰好等于S,且它们的倒数之和与1的差不超过10^-6。 输出任意一种方案或者输出无解。 S#include#include#include#define eps 1e-6 using namespace std;int s...
阅读全文
摘要:折半搜索(meet in the middle)和two point; 题目:有n个数,共有2^n个子集,一个子集的值看做其所有数的和。 求这2^n个子集中第K大的子集。 n#include#include#in...
阅读全文
摘要:名字是zhw起的。 有这样一个问题: 解法: 利用两个指针,其中一个从前往后扫a数组,另一个从后往前扫b数组,先固定其中一个,另一个来扫 用可能成为最大值的数来更新答案。 具体看代码吧:#include#include#include#includeusing names...
阅读全文
摘要:树状数组(lowbit) Time Limit:1000ms Memory Limit:128MB题目描述 这天,LYK在学习树状数组。 当它遇到一个叫lowbit的函数时有点懵逼。lowbit(x)的意思是将x分解成二进制,它的值就是,其中k是最小的满足(x &...
阅读全文
摘要:送分题(songfen) Time Limit:1000ms Memory Limit:128MB题目描述 LYK喜欢干一些有挑战的事,比如说求区间最大子段和。它知道这个题目有O(n)的做法。于是它想加强一下。 也就是说,LYK一开始有n个数,第i个数字是ai,它找来了一个新的数...
阅读全文
摘要:#include#include#include #include#include#define LL long longusing namespace std;LL f[88888];int t,len;LL n;void pre(){ f[0]=0; f[1]=1...
阅读全文
摘要:http://codeforces.com/contest/371/problem/B 暴力一点的写法:bfs搜索(可以过,但是有更优的做法),共六种拓展方向,优化一点是:吃大的。 代码:#include#include#include #include#include#define...
阅读全文
摘要:http://codeforces.com/problemset/problem/371/C最好的做法:二分答案。根据枚举的答案判断是否能做出这个数量的汉堡,不断优化答案。(需要注意上边界,不要忘了原有的材料数)。 代码:#include#include#include #inclu...
阅读全文
摘要:内存要求1M,太小了! 分析: #includeusing namespace std;int n,a,c,x;int main(){ scanf("%d",&n); while(n--) { scanf("%d",&x); if(c=...
阅读全文
摘要:O(n^2)的做法:一次性地将酒倒入第一个杯子,然后两层循环扫描每个杯子,把酒量超过1的杯子中的酒向左下向右下溢出。(其实是模拟啊) 注意要用数组double型。#include#includeusing namespace std;double a[1005][1005];int...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1314#sub 看到这个题,想到二分是不难的,但是如果就直接上二分,简单暴力地求和,就会超时。O(mnlogw) 观察题目,区间可能是重合的或者叠盖,就考虑到前缀和来优化,将m*n缩减到m+n。 最终复杂...
阅读全文
摘要:大暴搜题; 搜索顺子,然后把剩下的牌按照四带,三带,对牌,单牌打出; 顺子有单顺,双顺,三顺。我一开始处理时把大小王分开处理了,不知啥原因不对,只有30 fen; 然后把大小王看做对牌后,就ac了。#include#include#include#include#include#in...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1297#sub 将小数先转化为整数处理,而且最后要/100.0 而不是100#include#include#include#include#include#include#includeusing na...
阅读全文
摘要:dp:http://blog.csdn.net/qq_36820605/article/details/72910904 二分:#include#include#include#include#include#include#includeusing namespace std;in...
阅读全文
摘要:这个题是大暴搜,然而我只能写一下30分的特判。后来写的搜索:http://blog.csdn.net/qq_36820605/article/details/73044736前6个点是可以特判通过的。需要注意的问题:记录牌数的数组,在处理每组数据前一定要初始化。(一开始我得了0分)3...
阅读全文
摘要:看到这个题,想到了二分答案。用二分的方法枚举最小距离x,和前面石块之间距离(变化)大于这个距离的石块就去掉,把去掉的石块数和m作比较,来变换x,最后找到答案; 但是,第一次写的时候,没有想到如果前面的石块被去掉,那么后面的石块在判断距离时,就会受到影响,并不是一成不变的。结果...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=3650 贪心. 方法:枚举山的高度作为最低点,把把山全部转移到这个范围内的花费记下来,不断求最小值。#include#include#include#include#include#include #de...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1217#sub 首先,四位的,六位的,八位的回文数一定不是质数,因为它们都是11的倍数。 此题无需打表质数,因为回文数(应该)比质数少。 枚举回文数,举例五位的:for(int d1=1;d1#inclu...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1215#sub 暴力模拟多种情况。我是用搜索写的,注意返回条件和约束条件。#include#include#include#include#includeusing namespace std;int a...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1214#sub 暴力枚举题,加上一些剪枝。 (原谅我卑劣地提交了两个答案特判)#include#include#include#include#includeusing namespace std;int...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1207#sub 练好基本功 进制转换#include#include#include#include#includeusing namespace std;int n,s,a[1000],t,ans[10...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1205大大大大大大枚举! 通过纸上画图来找各个情况中点与点的对应坐标关系。 还需要注意的问题:题目要求序号尽量靠前。#include#include#include#include#include#inc...
阅读全文
摘要:#include#include#include#include#include#includeusing namespace std;int n;int ans[10];int a1[]={0,31,28,31,30,31,30,31,31,30,31,30,31};int a2[...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1201#sub注意的问题:送出去的钱是整数!#include#include#include#include#include#include#include using namespace std;int...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=3402 先看一下数据规模:n#include#include#include#include#include#includeusing namespace std;map ma; int n,m;in...
阅读全文
摘要:纪念一下,这是我自己第一个自己想出转移方程的dp题! 先定义一下数组,f[i][j]表示第i个人,抄了j本书花的最短时间。 w[i][j]表示[i,j]闭区间内,从第i本书抄到第j本书用的时间; 转移方程:f[h][i]=min(f[h][i],max(f[h-1][j],w...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1108#sub 第一问,求一个最长的下降子序列就可以了。 难点在于第二问,解决方法: 设f[i]表示到i这一位置,最长下降子序列的最大方案数; 当构成序列相同时,可以看出……呃,举个例子吧: ...
阅读全文
摘要:评测 f[i][j]表示a中前i个字符转化为b中前j个字符最短编辑距离。结果就应是f[l1][l2] 赋初值:a串空时,对应b中j个字符时最短距离就是j(插入j个),f[0][i]=i;(i#include#include#includeusing namespace std;int...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1026#sub 点:同一字母不能重复用做首字母。 首先,处理出数组w[i][j] ,表示从i到j有多少个单词(当以同一个字母为首字母时,越短越好)。 然后,求出d[i],表示以i开头的最短单词的结尾的位置...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1052 观察数据,L到10^9,就是O(n)也不可以。 然后再观察数据,发现共才100个石子,对于桥的长度来说石子非常稀疏,中间有一大块空白区域。 状态转移方程: f[i]=min(f[i],f[i-...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1004#sub 四维做法基于可以看做俩个人,同时走。 从左上角到右下角步数是一定的,所以可以压缩到三维。#include#include#includeusing namespace std;int f...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1006#sub 和方格取数类似,可以看做同时从左上角出发,同时走,步数是同步的。 可以用四维数组,也可以用三维数组。 从左上角到右下角,步数是两点的曼哈顿距离。 得到状态转移方程 :int h=max(m...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1387法1:矩阵前缀和(n^3) 枚举点i,j 和边长o,如果右下角与左下角之间的数是完全平方数,既是正方形。#include#include#include#include#include#includ...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1313 系数应该是a^n*b^m*c(n,m),主要是求c(n,m) c(n,m)=n!/m!*(n-m)! 法1: 分解质因子#include#includeint su[20000],yz[2000...
阅读全文
摘要:评测 题目描述同上题。 其中n#include#include#define LL long long#define M 2147483647using namespace std;int n,a[300005],len;int up[300005];//up[i]记的是长度为i的的...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1020 法一,dp 第一问要求一个以第一个为起点最长不上升子序列。 第二问,只要后面的比前一个高,就要再另用一套系统,所以问题可以转化为求最长的上升子序列。#include#include...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1018#sub 其实这个数据范围貌似搜索是过不了的,但是在lg上过了 这里搜索的方法是,dfs(int x,LL ans,int bef),x表示已经用了几个乘号,ans表示前面放完乘号得到的乘积,be...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1091#sub问题转化为:枚举中间点,以此为终点求最长的上升子序列,以此为起点求最长下降子序列。#include#includeusing namespace std;int q[110],fq[110]...
阅读全文
摘要:问题转化为求1-n的欧拉函数的和*2+1#include#include#include#include#include#include#include#define LL long long#define M 1009using namespace std;int phi[M],p...
阅读全文
摘要:首先有以下性质:(p 为素数) 1. φ(p)=p-1 2. 如果i mod p==0,那么φ( i*p )=p*φ( i ) 3. 若i mod p≠0,那么φ(i*p)=φ(i)*(p-1)证明见http://blog.csdn.net/Lytning/article/deta...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=3383#sub#include#include#include#include#include#include#include#define L long#define M 200000007using ...
阅读全文
摘要:http://poj.org/problem?id=3292如果一个数 i 是 H-素数,那么5i+4i*x一定是H数但不是H-素数, 因为(5i+4i*x)mod 4=5i mod 4=(5 mod 4)(i mod 4)=1*1=1,且5i+4i*x=i(4x+5).做法:先找出...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=3518问题描述: 有一个密码箱,0 到 n-1中的某些整数是它的密码,且满足:如果a和b都是它的密码,那么(a+b)%n 也是它的密码(a,b可以相等)某人试了k次密码,前k-1次都失败了,第k次成功了。...
阅读全文
摘要:由题目可得式子:m*t-n* t=y-x+q * l - - -> (n-m)*t+q*l=x-y令a=n-m,b=lc=x-y; a*t+b*l=c 求最小的正t令z=gcd(a,b) 先求a*t+b*q=z ① 当然如果c/z!=0就无解了 得出一组解t...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1290#sub 这题目好像辗转相除。 每次的两个数 a , b (a>b) 分为两种情况: 一, 此时状态为: a/b>1 ,那最完美的做法是取走(a/b-1)*b,那么剩下的两个数就为(a%b+b,b...
阅读全文
摘要:题目描述求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解。(保证有解)该方程等价于=>a* x-b* y=1 => a* x+b* y=1 (1/GCD(a,b)==0,即a,b互质)#include#include#define LL long longusi...
阅读全文
摘要:题目描述首先所有的灯都是关的(注意是关!),编号为1的人走过来,把是一的倍数的灯全部打开,编号为二的的把是二的倍数的灯全部关上,编号为3的人又把是三的倍数的灯开的关上,关的开起来……直到第N个人为止。给定N,求N轮之后,还有哪几盏是开着的。1 #include#include #in...
阅读全文
摘要:N#include#include#include#include#include#include#include#define M 50000using namespace std;int n,cnt=1,num[2*M+10],nxt[2*M+10],head[M+10],va...
阅读全文
摘要:逆元(费马小定理)+ 快速幂+ 等比数列 读题可知,答案是i~n的以 i 为公比的m项的等比数列和的和;就用到了我们的数学公式: Sn=a1*(q^n-1)/(q-1)然后就用到了逆元——费马小定理: x^(p-1) mod p=1(q^n-1)/(q-1)mod p那这个式子就等于...
阅读全文
摘要:缺少删除,见下一篇中的treap平衡树 特点:左大右小代码#include#include#include#include#include#include#include#define M 99999using namespace std;int lc[M],rc[M],size[M...
阅读全文
摘要:题目描述: 给出T个n,求斐波那契数列的f(f(n)).(答案取模1e9+7) 数据范围: 100% 1#include#include#include#define ull unsigned long longusing namespace std;long long a,b,c,...
阅读全文
摘要:样例有误 应该输出 0 1000000006刚看到这个题,一脸懵逼。打个表观察一下 发现,除了做一次gcd时,如果做 t 次gcd,那么和最小的 a 和 b 分别是斐波那契数列的f[t+1]和f[t+2]。由于k很大,用矩阵快速幂即可。 而做一次就是 1 1(需要特判)打表程序...
阅读全文
摘要:最大值的求法:h[i][j]的高度为min(h1[i],h2[j]);既保证不会超过最大值,又能尽量的大。 最小值的求法:先考虑没有重复的,每一个高度都需要加上。除了需要看见的,其他的都设为零。 在每一行放置的时候,如果某一列中有与他相等的,且还没有放置 ,就可以将这两个柱子重合...
阅读全文
摘要:、约瑟夫问题,数组链表可以过的。而且贼快。#include#include#include#define N 100009using namespace std;int n,t,L[N],R[N],p,d,rest;bool f[N];int main(){ freopen("...
阅读全文
摘要:P1896 https://www.luogu.org/problem/show?pid=1896 这是一道状压dp题(状态压缩)。It`s the first time that I had accepted a zhuangya dp problem! 把一行每一位放与不放用二进...
阅读全文
摘要:题目大意: 给出x1 ,y1 ,r1 ,x2 ,y2 ,r2,代表两个圆。 计算两个圆覆盖的面积。 重叠时,ans=S圆-S扇+S三角形。#include#include#include#define P(x) (x)*(x)#define Pai 3.1415926 using n...
阅读全文
摘要:【问题描述】 在一片草原上有N个兔子窝,每个窝里住着一只兔子,有M条路径连接这些窝。更特殊地是,至多只有一个兔子窝有3条或更多的路径与它相连,其它的兔子窝只有1条或2条路径与其相连。换句话讲,这些兔子窝之前的路径构成一张N个点、M条边的无向连通图,而度数大于2的点至多有1个。 兔子们...
阅读全文
摘要:【问题描述】 有一种圆桌游戏是这样进行的:n个人围着圆桌坐成一圈,按顺时针顺序依次标号为1号至n号。对1#include#includeusing namespace std;int n,f[109][109],dp[209][209],id[209];int main(){...
阅读全文
摘要:【问题描述】 商店里出售n种不同品种的花。为了装饰桌面,你打算买m支花回家。你觉得放两支一样的花很难看,因此每种品种的花最多买1支。求总共有几种不同的买花的方案?答案可能很大,输出答案mod p的值。【输入格式】 一行3个整数n,m,p,意义如题所述。【输出格式】 一个整数,表示买花...
阅读全文
摘要:题目描述 历史学家小A正在研究一个奇怪的王国的历史。当前阶段的任务是研究该国的交通。 根据这个奇怪的王国的史书记载,史书开始记载前这个王国有 n 个城市(城市从 0 开 始标号) ,但所有城市之间都没有道路相连。 每一年,在位的国王会修建一条 x 到 y 的双向道路,一条道路可能被修...
阅读全文
摘要:把直接认识的人小于d的人删去,然后染色,找最大值就可以了。 一开始删点时,将已经删过的点重复入队,把它的临接点的du多次重复地减,导致出错。#include#include#include#include#include#include#define N 200009using n...
阅读全文
摘要:60分的做法:O(n^2) 处理出矩阵的前缀和,那么就可以O(1)地查询任意矩阵的大小,O(n^4)枚举所有矩阵,求出答案。100分的做法: 对于1号点和2号点,它们两个结合是对答案的贡献是: 2∗a[i1][j1]∗a[i2][j2]−−−① + a[i1][j1]2+a[i2...
阅读全文
摘要:这数据写个暴力都拿不了30分 T_T。 C(n,i)*C(n,i)=C(n,i)*C(n,n-i) => 结合现实意义,在n个里面选 i 个,再在n个里面选n-i个的方案数。 就等价于在前n个中选 i 个,在后n各种选n-i个。而且i = 0~n => 在2*n各种选n个。 那么...
阅读全文
摘要:贪心。 要使得人数最小,必须使最后剩下活着的人最少。 那就按照b-a(剩下人数)降序排序#include#include#include#include#include#define LL long long#define N 100009using namespace std;...
阅读全文
摘要:数据范围 对于 20%的数据,n=5 对于 60%的数据,n#include#include#include#define LL long long#define M 1000000000using namespace std;int n,a[409];int f[409][409...
阅读全文
摘要:luogu 传送门 注意: 真正的规则:达到11或21分后,要等到两人分值差>=2时才算完成一局。#include#include#include#include#include#includeusing namespace std;char c,a[100001];int numw...
阅读全文
摘要:二分答案。 关键在于check()的写法。20分的写法: check(x) 中O(n*n)的写法:直接枚举起点,一直往后加,一旦>x,就加一张菜单,如此枚举。60分的写法: 二分加二分。用一个前缀和来优化。 check(x)中枚举起点s,设当前这一张菜单的起点为L,那么下一个起点就...
阅读全文
摘要:1s 256M 这题的解法好巧妙。 我们可以通过dfs来处理一个 f 数组。f[i]表示以i为根的子树有多少个节点。 那么当我们从1到n枚举每个块的大小时(n%i==0),然后扫一遍 f 数组,f[]为 i 的倍数的个数如果等于n/i,那么就是一种成功的方案。#inclu...
阅读全文
摘要:【数据规模与约定】 对于 20%的数据,N≤10,-2≤a[i]#include#include#include#include #define LL long long#define N 209using namespace std;int a[N],b[N],c[N],d[N]...
阅读全文
摘要:【问题描述】Vasya在玩一个叫做”Dwarf Tower”的游戏,这个游戏中有n个不同的物品, 它们的编号为1到n。现在Vasya想得到编号为1的物品。 获得一个物品有两种方式:直接购买该物品,第i件物品花费的钱为ci用两件其他物品合成所需的物品,一共有m种合成方式。请帮助Vasy...
阅读全文
摘要:二分答案,check()用two point写#include#include#include#define LL long long#define N 200009using namespace std;int n,m;LL k;LL a[N],b[N],num,L,R,mi...
阅读全文
摘要:50%的做法: 先按照s升序排序。 从小到大枚举maxg,把g小于maxg的边全部选出来,(因为前面已经排过序了),造一棵最小生成树,更新答案。时间复杂度≈O(m*m)。 100分的做法: 按照g升序排序。 维护一个n-1条边的边集,是上一个建造的最小生成树的边集。 从前往后枚...
阅读全文
摘要:问题描述 有N辆列车,标记为1,2,3,…,N。它们按照一定的次序进站,站台共有K个轨道,轨道遵从先进先出的原则。列车进入站台内的轨道后可以等待任意时间后出站,且所有列车不可后退。现在要使出站的顺序变为N,N-1,N-2,…,1,询问K的最小值是多少。对于30%的数据,N≤10; 对...
阅读全文
摘要:问题描述 平面上有N条直线,用方程Aix + Biy +Ci =0表示。这些直线没有三线共点的。现在要你计算出用这些直线可以构造出多少三角形?输入格式 第1行:一个整数N(1 ≤ N≤ 300000)。 下面N行:每行3个整数:Ai, Bi 和Ci,表示对应直线方程的系数。不超过10...
阅读全文
摘要:time:3s 难度:Day2 T3 长长的题面 这是一道好难的题。 正解是DP+单调队列。(蒟蒻不会啦,看了题解也迷迷糊糊) 我只写了一个裸的DP,期望值60分,意外惊喜地拿了80分,好开心。 我们枚举时间,f[t][i][j][k]表示第t秒站在(i,j),已经用了k次闪现...
阅读全文
摘要:50%的做法:枚举每一个点,一直走到尽头,记录长度,更新答案。像这样的有n条边,n个点,每个点都有一条出边的点一定存在环。这样的图叫做 环加外向树。那么对于这道题的满分做法,先求出每颗树的叶子到树根的最长路径记为f[i],再找出环,然后每次枚举环上的点x,(环的长度len),用l...
阅读全文
摘要:仔细分析,发现要使最大不满意度最小,排队顺序应该是按照最长等待时间来排。 如果不是这样,交换任意两个人的位置,那么这两个人等待时间的最大值一定比原来大。 所以这样排的正确性显然。#include#include#include#include#define LL long long...
阅读全文
摘要:luogu 传送门 我们只要判断到路口时是不是绿灯,如果是绿灯就可以直接输出,否则加上等待时间。 判断时,取模就好啦。#include#include#include#include#include#includeusing namespace std;int n,m,a[10000...
阅读全文
摘要:uoj 传送门 第一次做交互题,大概明白了是啥意思,就是写一个函数,帮助实现一个操作。 题目中有要求,调用题目中给出的可以用的函数次数越少越好,这就是优化所在。 这道题就是在三个升序数组中找所有数的第K大,我们要尽量少用题目中已给出的函数。 我们每次现在三个数组中找出第k/3大,k-...
阅读全文
摘要:luogu 传送门 矩阵乘法快速幂,注意记录过程量; 还有就是如果前面已经算过了,直接赋值就好了。#include#include#include#include#include #define LL long long#define MOD 1000000007using name...
阅读全文
摘要:uoj 传送门这是uoj上的题解先写了一个45分的dfs#include#include#include#include#include#define LL long longusing namespace std;LL n,m,ans[50],P=1;void dfs(int x,...
阅读全文
摘要:HDU 传送门 这是一道变形的完全背包。 我们用dp[i][j]表示打倒血量为i防御力为j的恶魔的最小花费。#include#include#include#include#include#define LL long long#define INF 0x3f3f3f3fusing ...
阅读全文
摘要:HDU 传送门 很显然,组合数。 输出C(n,m)就可以了。 因为询问比较多,所以用杨辉三角就可以了。#include#include#include#include#include#define LL long long#define MOD 1000000007using nam...
阅读全文
摘要:uoj 传送门 蒟蒻做这个题是一懵一懵的啊。题意就好难懂! 我们以 || 为分界线,分成若干块。因为在每一小块中有0这一块的返回值就是0,在整个表达式中有某一块的返回值为1,那整个式子就是1,剩下的块都不用算了。 只有当手机返回值为1时才能造出手机。而且在当前这块中复制出的手机,在下...
阅读全文
摘要:uoj 传送门 列与行之间单独处理。 对于列之间,我们判断dis只需要看b数组就可以了。 同理对于行只看a数组就可以了。#include#include#include#include#include#include #include#define N 200009#define L...
阅读全文
摘要:按照正解的做法,我只得了80。首先我们要明确这是一张竞赛图。 然后有一个点,在竞赛涂上如果存在环,那么就一定有三元的环。解释如下 这样找到的第一个三元环是1->3->4->1观察一下图,看一下代码。嘻嘻 shipinjiangjie#include#include#include...
阅读全文
摘要:分析一下我们需要找一个最大的集合,使得集合内的任一成员相互之间没有发生过争吵。 我们知道,两个人没有发生过争吵的条件是小的在前,大的在后。那么一列人不会发生争吵的条件是这是一个上升子序列。 那么题目就是要求我们用nlogn的方法求最长的上升子序列(板子题嘛)。 对于nlogn求上升...
阅读全文
摘要:len#include#include#include#includeusing namespace std;char s[1009],m[1009],a[1009];//密文,明文,解密 int f[30],f2[30];int main(){ cin>>m+1;cin>>...
阅读全文
摘要:HDU 传送门 开始肯定是先将区间按照 l 然后 r 升序排序。 我的做法:再合并一下区间(能合并的就合并)。 我一开始想了一种可能会超时的做法,我枚举x区间,计算从第x个区间后面的间隙开始补签,一直更新最大值,貌似真的会超时。然后我又想了用前缀和来优化一下,应该会过的。然后我获悉了...
阅读全文
摘要:luogu 传送门倍增吗? 我们定义 f[k][i][j] 表示从点 i 到点 j 能否通过跳2^k(1秒)直接跳到,跳到为1,否则为0; 那么就有如果 f[k-1][i][j]&&f[k-1][i][j] 则f[k][i][j]=1; (想一想就是啊)如果可以一步跳到的,di...
阅读全文
摘要:luogu 传送门介绍一下我的做法: 对房子按照坐标排序,对每一个房子,记一下前缀和后缀和(前面/后面房子中的人到当前房子的路程和), 最后扫一遍取前缀和和后缀和的和的min就可以了。但是好像跟样例解释不太一样啊。#include#include#include#include#in...
阅读全文
摘要:luogu 传送门 我们可以设一个矩阵A={p , 1 q , 0}ans矩阵{a2 , a1},用ans矩阵*A矩阵的n-2次方,ans[1][1]就是答案了。 正确性自己在纸上画一画就显而易见了。...
阅读全文
摘要:luogu 传送门 矩阵乘法的法则 矩阵乘法的法则#include#include#include#include#include #define LL long long#define MOD 1000000007using namespace std;LL a[109][109]...
阅读全文
摘要:uoj 传送门题目大意:给出一串字符串,求它的子串中形如AABB的方案个数。90% len#include#include#include#include #define LL long long#define MOD 1000000009#define base 163#defin...
阅读全文
摘要:luogu 传送门直接上板子#include#include#include#include#include #define LL long long#define MOD1 1000000007#define MOD2 1000000009#define seed1 163#def...
阅读全文
摘要:30分做法:n^4枚举边. 100分做法: 枚举每一条边,设两个端点为x,y; 我们通过组合公式来计算 Y 的个数,每一次加上C(num[x]-1)*(num[y]-1); 通过记连接一个点的边的最大值,次大值,第三大值。 加上除去枚举的边外x连接的最大的两条边,以及y连接的除去… ...
阅读全文
摘要:问题的实质是要我们求两个分数的最小公倍数。 首先,我们要知道,整数a和b的最小公倍数是a*b/gcd(a,b); 那么怎样来求分数的最小公倍数呢? 我们可以先将两个分数通分,分母变为t1,然后再求分子的最小公倍数t2。 那么答案就是t2/t1, 注:最后要约分.#include#in...
阅读全文
摘要:luogu 传送门bfs拓展嘛。 不过这里有一点特别之处,就是记录状态时要三维,f[i][j][0/1],代表到了(i , j)这个点是否使用过向量。 在bfs中往四面走,如果没有使用过向量,就再拓展一下使用向量的。(还是比较容易啦)#include#include#include#...
阅读全文
摘要:luogu 传送门挺好想的贪心(蒟蒻一下就想到啦)。 我们从前往后处理时,尽量吃后面的糖,因为后面的糖会对后面产生影响,而前面的就不会影响了。 不过要开long long ,为此我wa了两个点。#include#include#include#include#include#defi...
阅读全文
摘要:有时候我们对于一个题先写了不确定的貌似是正解的程序,然后又写了保证正确的暴力。 那么我们怎样来确定我们想的正解对不对呢?对拍。 对拍我们需要这样几个文件: data是数据生成器,right是暴力,test是待定正确程序。 举一个a+b的例子,里面是这样写的。data.cpp#incl...
阅读全文
摘要:luogu 传送门 搞了半天,终于搞了出来。 以前写过一个暴力70分的做法(点这里)在70分的基础上: 注意到只有空格在指定棋子旁边才有意义,所以可以O(n^2)记录状态,记录空格在指定棋子的哪个方向。 因为询问数比较多,所以可以预处理出来【指定棋子不动,空格移动到另一边】和【棋子...
阅读全文
摘要:luogu 传送门 双倍经验! 树状数组题 v[i]只有当和比它小的v[j]一起运算时才对答案有贡献。 我们可以这样来处理,离线来做。将所有奶牛按照v升序排序,然后一个奶牛一个奶牛的查询,再插入。 我们要树状数组来维护一个数组cnt[i],和sum[i]表示i-lowbit...
阅读全文
摘要:给出一段序列,选出其中连续且非空的一段使得这段和最大。 注:非空 是dp吧;#include#include#include#include#includeusing namespace std;int a[200010],f[200010];int main(){ int n...
阅读全文
摘要:luogu 传送门 题目描述 给出一个 n 个数的序列,为 A0,A1,„„,An-1,循环移动 k 位之后,这个序列就变 成了 Ak,Ak+1,,,,An-1,A0,A1,,,,Ak-1。一种优秀的循环移动是,对于任意的 前 i(1#include#include#include ...
阅读全文
摘要:luogu 传送门这个题,用O(n)真的可以吗?大概是洛谷数据太弱了。#include#include#include#include #define LL long longusing namespace std;int n;LL ans=1;LL work(LL x){ w...
阅读全文
摘要:水#include#include#includeusing namespace std;int n,ans;char a[109];int main(){ scanf("%d",&n); cin>>a; int s=0; for(int j=0;j<n;j+...
阅读全文
摘要:luogu 传送门这题好生厉害!如果n再小一点的话,这题是个贪心。我们把烧到过100度的水能进行热传导就进行热传导,一直向后进行。 这种做法是O(n^2)的,显然过不了。 然后注意到,这题肯定有规律嘛!推导:设沸腾温度为a 则第一杯温度为a,需要加热t1=a 第二杯可以中和的最高温...
阅读全文
摘要:luogu 传送门#include#include#include#include #include#include#include#includeusing namespace std;int n;int px[709],py[709];double f[701][701];int...
阅读全文
摘要:luogu 传送门标准的二分答案。 check中,我们用bfs判断以当前的标准是否能拓展出所有的路标。 注:此题是m行n列。#include#include#include#include #include#include#includeusing namespace std;int...
阅读全文
摘要:http://codevs.cn/problem/1959/ 有两种做法: 第一种:dp;不过这个dp比较难想,而且比较特别,,解释见代码注释。#include#include#include#include using namespace std;int n,sum,k,a[105...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1197思路和关闭农场差不多,不过加了一些时间上的优化。 当我们加入一个点时,先假设又加入一个单独的连通块,然后再扫一下与它相连的点如果在图中但是与它不在一个联通块中,那么就将其合并,连通块个数减一。 注:...
阅读全文
摘要: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+m...
阅读全文
摘要:#include#include#include#include#includeusing namespace std;int n,k,ans;int main(){ cin>>n>>k; while(n>=k) { ans+=k; n=...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=2614 这是一道模拟题,就是细节有点多。 首先,括号里没有 - ,所以是 - 时,直接当成音符处理,又因为没有超过4个节拍的音符,所以遇到‘.’,判断前面是不是 - ,与普通字符分开处理就可以了。#inc...
阅读全文
摘要:Codevs 传送门题目描述 Description 奶牛们在FJ的养育下茁壮成长。这天,FJ给了奶牛Bessie一个任务,去看看每个奶牛场中若干只奶牛的身高,由于Bessie是只奶牛,无法直接看出第i只奶牛的身高,而只能看出第i只奶牛与第j只奶牛的身高差,其中第i 只奶牛与第...
阅读全文
摘要:要知道90的倍数各位加起来肯定是9的倍数,而且最后一位一定是0。#include#include#include#includeusing namespace std;int n,num1,num2;int a[1009];int cmp(int x,int y){return x>...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=2667#subn#include#include#include#includeusing namespace std;int n,ans[101],cnt;bool Isprime(int x){ ...
阅读全文
摘要:大大大水题。#include#include#includeusing namespace std;int n;char a[100];int main(){ scanf("%d",&n); for(int i=1;i>a; int x=a[strlen(a...
阅读全文
摘要:有一个大水题!#include#includeusing namespace std;int n,m;int num[11];int main(){ scanf("%d%d",&n,&m); for(int i=n;i<=m;i++) { int x=...
阅读全文
摘要:大水题!#include#includeusing namespace std;int k;int main(){ scanf("%d",&k); int flag=0; for(int i=10000;i<=30000;i++) { int a...
阅读全文
摘要:Codevs 传送门 解法:因为这道题中颜色在一直变化,所以要用到一个分层图的做法。 因为颜色来回变,所以我们用0 , 1 来表示当前的时间。当时间是0时,所有点的颜色与起初一样;当时间为1 时,所有点的颜色就与起始时相反了。 用spfa来跑最短路时,交叉松弛, 我们用dis[ ][...
阅读全文
摘要:luogu 传送门我们枚举1~maxn每个数 i ,求出它的倍数的个数cnt,那么cnt就是以 i 为最大公约数时数的个数, 那么 i 就可能作为从1~cnt 的答案,对ans取max就可以了。#include#include#include#include#include#incl...
阅读全文
摘要:luogu 传送门bfs,像输入一样我们用一个数来表示状态,因为不能开一个9位的数组,又因为如果数的八位确定,那么最后一位就能确定,所以我们可以开一个8位的数组来记录这个状态是否进过队。重点是将0与其它位转换,基于九宫格的特点,我们只能将0与和它相距 1 -1 3 -3 位的数字交换...
阅读全文
摘要:Codevs 传送门我们可以用二进制数来表示状态(状态压缩),1代表患病,0代表不患病。 把每一种药对人的影响分别用两个数记录下来: 对于治病,我们用0代表治病,1代表无影响,我们与当前状态做一下 and运算,就把病治好啦。 对于患病,我们用1代表患病,0代表无影响,我们与当前状态做...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=2327 对于这道题,我们如果知道了第一个位置有没有雷,就可以根据这个信息来判断下面位置有没有雷。 所以答案只有三种:0 , 1 , 2 根据第i个位置和第i-1位置有没有雷,就可以推出第i+1位置的雷的个...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1092好一道搜索题! 一开始我自己写了一个史上最无脑的搜索,结果只得了10分,全部TLE掉。参考了题解,才发现自己的暴力搜方法不太对,我是枚举数的每一位是每一个数。。。就是好无脑,不超时才怪。参考了题解(...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1120#sub 枚举最小长度(从max–>sum),用dfs来判断,如果能成功就可以,退出即可。 dfs中有好多高深的剪枝!! 先将长度降序排序,便于剪枝。剪枝: 判断当前的len时 1).如果在前面已经...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1378 思路简单的搜索题。 但是!这题真的是让我挠心啊! 请看注释的那两行,为什么!!(表示被这样坑了一天)#include#include#include#include #include#define...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1514先用dfs搜索,从最上面的一行往下拓展,所有点拓展完后,扫描最后一行是否有没被染上色的,有则说明 不能满足要求; 如果没有,在用dfs,计算出最上面一行的每个点(大于等于两边的点)能拓展到的最左端和...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=3373#include#include#include#define M 100000#define LL long longusing namespace std;struct H{ LL sum...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=2161题意简析:你需要写一个数据结构,维护一个时间轴,支持如下操作:1)插入1个新区间,删除所有时间轴上与它有交的区间并输出个数。2)查询当前时间轴上的区间个数。我们可以用线段树来做(借鉴了sxb大神的代...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1821大体描述一下题意:一张图,边为有向边,给出一个点 s,求其它点最大的从 x 到 s 和从 s 到 x 的最短路之和。机智的做法:我们可以跑两遍spfa,先跑出 s 到其它点的最短路,在将所有边反过来...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1083#sub一开始容易想到的方法是线段树,每次修改时,如果出现负数,那么当前这个人一定不能满足了。 但是在noip里,这肯定不是正解,所以会超时那么一两个点。#include#include#inclu...
阅读全文
摘要:http://codevs.cn/problem/1191/ 这个数据范围是要nlogn的做法嘛。 线段树:一开始把数组全设为1,建一下树,然后修改的时候把白球全修改成0,每次用线段树求和就好了。 不过我确实调了一个上午啊。感谢sxb大神帮我找错#include#include#de...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1168#sub用上c++的stl中的优先队列,小根堆用负值来存,构成对顶堆,就变成了一道水题。#include#include#include#include#include#include#includ...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=3144#sub 分析:按顺序去掉点后查询图是否还是联通的,那么我们就可以按照删除的顺序倒着加点。 在加某个点之前判断图是否是联通的,即按顺序去掉这个点后图是否是联通的。 具体的处理方法:根据输出要求,我们...
阅读全文
摘要:对图染色。但是一个个地染会超时O(n^3),显然我们要用O(n^2)的做法。 因为我们对每一行的染色是一段区间的操作,所以我们可以用差分来做。枚举弦心距(0~r,一定是0~r,为什么很显然),求出弦长,根据圆心的坐标,可以求出这一行的左右端点,就可以对这段区间进行差分了。时间复杂度:...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1631#sub做法: 将 a 和 b 都从小到大排一遍序。 然后组成这样一个矩阵: a1+b1 , a1+b2 , a1+b3 , …… , a1+bn a2+b1 , a2+b2 , a2+...
阅读全文
摘要:http://poj.org/problem?id=1984这是一道经典的带权并查集,每插入一个点,维护两个权值的数组,代表关于根节点的x坐标和y坐标, 记录这两个权值数组就可以了。W是x减,E是x加,N是y减,S是y加。 合并时,注意一些细节。(注意我们输入的是x和y之间的距离,记...
阅读全文
摘要:http://poj.org/problem?id=1850首先应该判断一下给出的字符串是否为升序,否则答案为0. 对于长度为L的一串,我们首先应该加上比它短的串的个数,然后再算它是长度为L的里面的第几个。 在算长度为len的串的个数的时候,因为都是升序的,特定的几个字符组成的串没有...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1908 做法:O(nlogn) 每次加入一个数,把当前输入进的数中比这个数大的数求和,用树状数组b来维护,b[i]表示的是 i~i+lowbit(i) 的个数和,每输入进一个数,就把b数组更新.#incl...
阅读全文
摘要:codevs 1262 http://codevs.cn/problem/1262/ 这是一个组合数问题,因为只能是升序,那题目就是在问你:C(3,j-1)是几。#include#include#includeusing namespace std;long long ans...
阅读全文
摘要:问题描述 暑假到了,Rick制定了一个长达M天的阅读计划。他一共有N本书,从1至N进行标号;Rick将它们从上至下摞成一堆。他每天都会读一本书,假设他要读编号为X的书,他会按照以下步骤: 1. 将这本书上方的所有书搬起来 2. 将这本书拿出来 3. 将搬起来的书摞回去 4. 看完后把...
阅读全文
摘要:问题描述 给出一个字符串S与N个操作。每个操作用三元组(L, R, K)进行描述:操作将字符串第L个到第R个位置构成的子串循环移动K次。一次循环移动就是将字符串最后的这个字符移动到第一位,其余的字符顺次后移。 例如,对于字符串abacaba,操作(L=3, R=6, K=1)后得到的...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=2712 拓扑排序嘛。每次找入度为零即没有被观测的摄像头砸掉,再把它所观测的摄像头的入度-1. 不过此题有一个特别坑的地方,就是摄像头的编号并不是1~n。#include#include#include#...
阅读全文
摘要:问题描述 Gob和Michael常在一起打乒乓球。他们是这样决定比赛的输赢的:比赛由若干大局组成;谁最先赢下s大局谁就获得比赛的胜利;在每一大局中,谁先得t分就获得本大局的胜利。在一次比赛中,他们只记录了比赛中的每一分是谁得的,但忘记了记录s和t。现在给出比赛的每一分的得分情况,求出...
阅读全文
摘要:问题描述(1S, 128M) 无所事事的Cinzo决定用坐电梯的方式来打发时间。他住在一个N层的房子中,最底下为1层,最高处为N层。他从他家所在的第A层出发,并决定连续坐K次电梯。 但由于迷信的缘故,B在中国被视为是不幸运的,所以整座楼并没有第B层。也是因为这个原因,如果Cinzo想...
阅读全文
摘要:问题描述 快毕业了,Barry希望能通过期末的N门考试来顺利毕业。如果他的N门考试平均分能够达到V分,则他能够成功毕业。现在已知每门的分数不能够超过R;他的第i门考试目前得分为Ai,如果想要在这门科目增加一分则需要多写Bi篇论文。Barry想知道,如果想要毕业的话,他最少需要写多少篇...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1979 用裸的bfs写到了70分。 记录状态可以记录当前指定棋子的位置和空白格子的位置,还有一个步数(用结构体最好啦)。 直到指定棋子的位置到了目标格子时,就可以停止了。要注意空白格子可能与指定棋子换位置...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1731 是一道搜索题,重点在于剪枝。 具体写在代码中#include#include#include#include#include#includeusing namespace std;int n,m,...
阅读全文
摘要:大暴力搜索题。 建图时,我的建图方法是偶数行偶数列为房子,奇数行奇数列是实墙(其实这些点是不再存在的)。 其他先赋值为没有墙,在根据输入来添墙。 看图更直观一点 样例图: 这样用bfs染色,就能做出前两问。 后两问,枚举每一面墙,如果墙两侧的房间不在一个大房间里,就可以合并,...
阅读全文
摘要:两人都绝顶聪明,所以一定会选让自己得分最高的。 选的时候有两种情况: 1.两个人分别选了一条边的两个端点。 2.一个人连同边和两个端点都选了。 因为最后结果是两个人的差,所以就可以将每条边的边权平摊到两个端点上(很巧妙的做法呢)。 这样做差时都满足上面两种情况(想一想)。#inc...
阅读全文
摘要:这个题用前缀和来判断a*b大小的矩形,是否和为0(将有障碍的标为1)。 一个不容易错的的写法是int work(int x,int y){ int sum=0; for(int i=x;i#include#includeusing namespace std;int a...
阅读全文
摘要:https://www.luogu.org/problem/show?pid=1195 克鲁斯卡尔最小生成树。#include#include#include#include#include#include#includeusing namespace std;int n,m,k,...
阅读全文
摘要:评测:http://www.lydsy.com/JudgeOnline/problem.php?id=1821 分析一下题目: 因为最后答案是距离最近的部落的距离最远,即尽量把短的边合并进部落中。 一开始可以看做n个部落,将边排一遍序,用克鲁斯卡尔从最小的边开始将两端的点合并(如果...
阅读全文
摘要:n个点的树,m次操作 给出一棵树,维护下列操作: 1.在x位置放上一只蝉。(如果已经有蝉,忽略此操作) 2.查询x位置的坏掉指数(坏掉指数是指距x位置最近的蝉的距离) 一开始时在1的位置有一只蝉。 10% N,M ≤ 10 40% N,M ≤ 100 100% N ≤ 2 ×...
阅读全文
摘要:给出n组询问,每一组询问包含两个字符串t s,问s中是否包含t。(t中有’?’,’?’可以代替任何字符)。 代码:#include#include#include#include#includeusing namespace std;int l1,l2,n;char s[100009...
阅读全文
摘要:数字(number) Time Limit:2000ms Memory Limit:128MB题目描述 LYK定义了一个新的计算。 具体地,一开始它有两个数字a和b。 每一步,它可以将b增加1,或者将a乘上b。 也就是说(a,b)经过一次操作后可以变成(a,b+1)或者(a*b...
阅读全文