10 2016 档案
摘要:题意: 思路:把每一行压成一个数 求一下 KMP 把每一列压成一个数 求一下KMP 答案就是两个周期之积网上的好多题解都是错的………………………..//By SiriusRen#include #include #include using namespace std;int...
阅读全文
摘要:思路: 我们知道 next[i]是失配的i下一步要去哪儿 next[n]就是失配的n要去哪儿 n-next[n]就是答案(即最短周期)啦//By SiriusRen#include using namespace std;int n,next[1000050],j;char a...
阅读全文
摘要:题意: 思路: 线段树+Dijkstra(要堆优化的)线段树要支持打标记 一个栅栏 拆成两个点 :左和右 新加一个栅栏的时候 看看左端点有没有被覆盖过 如果有的话 就分别从覆盖的那条线段的左右向当前的左端点连一条边权为距离的边右端点同理 跑一遍Dijkstra 就好啦复...
阅读全文
摘要:思路: 贪心 对于每个波浪 ans+=最大值-最小值注意最后一定是选最大值//By SiriusRen#include using namespace std;int n,a[150500],flag,ans;int main(){ scanf("%d",&n); ...
阅读全文
摘要:题意: 思路: 类似滑雪 //By SiriusRen#include #include #include using namespace std;#define N 444int n,ans=-1,s[N*N],map[N][N],cnt,f[N][N],xx[]={2,2,...
阅读全文
摘要:思路:字符串解密 啥都告诉你了 模拟就好//By SiriusRen#include #include using namespace std;char a[666],ch[666],b[6666];int main(){ for(int i=0;i<256;i++)c...
阅读全文
摘要:句意理解题 解释输入好啦: 第一行n个数 m场电影 随后m行 每行的第一个数 代表 有k奶牛在这个电影中出现过 随后k个数 是奶牛的编号如果两头奶牛在同一个电影中出现过 相互度为1 奶牛们的相互度可以累加 (这句话的意思是 :请用Floyd解此题)输出最少的一头奶牛的相...
阅读全文
摘要:题意: 思路: 二分一个答案 让整个数组都减掉它 判判有没有相距>len的逆序对//By SiriusRen#include #include #include using namespace std;int n,len;double a[1005...
阅读全文
摘要:思路: 如果j能由i得到 则i向j连一条边答案就是最长路的末节点所代表的string//By SiriusRen#include #include #include using namespace std;#define N 3005int n,first[N],next[N*...
阅读全文
摘要:题意: 思路: 按照题意暴搜注意 如果目标串==给的串 答案是2 //By SiriurRen#include #include #include using namespace std;int n,k,goal,a[1005],head,tail,q[1000000],...
阅读全文
摘要:题意: 思路: 数据范围很大 貌似只能用并查集了……//By SiriusRen#include using namespace std;int p,f[33333],d[33333],xx,yy,s[33333];int find(int x){ if(x==f[x...
阅读全文
摘要:题意: 思路: 从前到后扫一遍 如果k个数都出现过了 ans++从当前接着判断最后答案就是ans+1//By SiriusRen#include using namespace std;int n,k,vis[10050],cnt,ans=1,jy;int main(){...
阅读全文
摘要:题意: 思路:考虑DP 先把事件按照地点顺序排个序 f[i][j][0]表示从i到j还没有去过 现在在i f[i][j][1]表示从i到j还没有去过 现在在j 那么方程就呼之欲出了 f[i][j][0]=max(min(f[i-1][j][0]...
阅读全文
摘要:思路: 枚举小数点前 的数是啥 判一判 复杂度是根号的…..注意精度!!!! //By SiriusRen#include #include using namespace std;#define LL long longint n,l;int main(){ ...
阅读全文
摘要:题意: 思路: 我们可以把每个矩形拆成四条线 与x轴平行的放在一起 与y轴平行的放在一起 排个序 判一判有没有交 有交 则说明不可扩张 统计一下 就可以了处理的姿势很重要 姿势不对毁一生//By SiriusRen#include #include us...
阅读全文
摘要:题意: 好久没做差分约束了,,, 看到这道题第一想法是贪心…………………………思路: 差分约束 从i到i+1的距离>=0 add(i+1,i,0)对于互相讨厌的牛从u到v的距离>=d add(v,u,-d)对于互相喜欢的牛从u到v的距离#include #in...
阅读全文
摘要:题意: 思路: 先搞一个vector 存以T2结尾的结构体 (结构体里面有开始工作的时间和花费) f[i]表示取区间[M,i)的代价 易得f[i]=min(f[k]+w,f[i]);T1#include #include #include using namespace...
阅读全文
摘要:题目: 思路:题目很有意思首先 题里说:Nusing namespace std;int n,k,ans,a[55],sum[55];void dfs(int rec,int x){ if(x>ans)ans=x; if(recans)dfs(i-1,x+a[i...
阅读全文
摘要:跟POJ 3042是一个类型的http://blog.csdn.net/qq_31785871/article/details/52954924 思路: 先排个序 (把初始位置也插进去) f[i][j]表示从第i个到第j个之间的蛋都被收完了 f[i][j][0]表示在地点i f...
阅读全文
摘要:题意: 思路: 莫名其妙TLE啊woc我A了一坨题的网络流模板有问题 !!!! 在常数上会慢 (一个等于号 啊啊啊) 改了所有网络流有关的文章… 。。。。//By SiriusRen#include #include #include using namespac...
阅读全文
摘要:这不就是跳石头嘛 (加上sort) 然后就二分答案 搞定~//By SiriusRen#include #include using namespace std;int n,k,l=0,r=0x3fffffff,ans,Mid,a[100500];bool check(){ ...
阅读全文
摘要:题意: 说人话: 从A到B连边 找从1到k的最短路 并输出路径(随便一条即可 ) 如果不能到达 输出-1 思路: 搜//By SiriusRen#include #include #include #include using namespace std;#defin...
阅读全文
摘要:题意: 思路: 搜+判重 嗯搞定 (听说有好多人用7个for写得….)//By SiriusRen#include #include 0using namespace std;bitsetbit;char s[17][17],vis[17][17],xx[]={1,-1...
阅读全文
摘要:题意: 思路: 按照题意模拟即可//By SiriusRen#include using namespace std;int c,f1,f2,d,xx,yy,vis[2005];int main(){ scanf("%d%d%d%d",&c,&f1,&f2,&d); ...
阅读全文
摘要:思路: 思路题 题目诡异地给了一组可行匹配 肯定有用啊….就把那组可行的解 女向男连一条有向边 如果男喜欢女 男向女连一条有向边 跑一边Tarjan就行了 (这个时候 环里的都能选 “增广环”嘛)嗯 就搞定了//By SiriusRen#include #incl...
阅读全文
摘要:题意: 思路: 把横着的连通块放在一个集合 竖着的放在一个集合如果有交 就连边 求最小覆盖即可 (数值上等于最大匹配)//By SiriusRen#include #include #include using namespace std;#define N 2555*...
阅读全文
摘要:题意: 思路: 搞一个priority_queue 先把边界加进去 不断取最小的 向中间扩散//By SiriusRen#include #include #include using namespace std;#define int long longstruct...
阅读全文
摘要:题意: 思路:先Floyd一遍两两点之间的最短路 二分答案 建图 跑Dinic只要不像我一样作死#define int long long 估计都没啥事……我T到死辣……..最后才改过来……(不过注意一哈 答案 &最短路确实是会爆int的)//By Si...
阅读全文
摘要:题意: 思路: 贪 贪 贪 如果当前的c>之前的c+s 那么之前的合适 一直贪下去就好了//By SiriusRen#include #include #include using namespace std;#define int long longint n,s,rec...
阅读全文
摘要:思路: 暴力枚举三个点 判一判 搞定 (x1*y1=x2*y2) x1、y1、x2、y2为他们两两的差//By SiriusRen#include using namespace std;int n,cnt; struct Point{int x,y;}point[888...
阅读全文
摘要:题意: 思路: 裸的Dijkstra 爆敲一发模板//By SiriusRen#include #include #include #include using namespace std;#define N 2222int f,p,c,m,xx,yy,zz,w[N],v[...
阅读全文
摘要:思路:暴搜//By SiriusRen#include #include #include using namespace std;int l,c,yuan,fu,lenth;char a[16],s[16];bool Yuan(char x){ if(x=='a'||x==...
阅读全文
摘要:思路: 枚举+搜一下+判个重 ==AC//By SiriusRen#include #include using namespace std;int a[8][8],xx[]={1,-1,0,0},yy[]={0,0,1,-1};sets;bool check(int x,int...
阅读全文
摘要:题意:判断连通块大小 水题//By SiriusRen#include #include #include using namespace std;int n,m,a[1111][88],xx[]={1,-1,0,0},yy[]={0,0,1,-1},vis[1111][88]...
阅读全文
摘要:题意: 思路:先说O(A^2T)的做法 f[i][j]表示前i个家族选j个蚂蚁的方案数 f[i][j]+=f[i-1][k] j-vis[i]#include #include using namespace std;int T,A,S,B,f[100005],sum[100...
阅读全文
摘要:题意: 思路: f[i][j][1]表示从i到j的区间全都吃完了 现在在j点 变质期最小是多少 f[i][j][0]表示从i到j的区间全都吃完了 现在在i点 变质期最小是多少 f[i][j][0]=min(f[i+1][j][0]+(s[i+1]-s[i])(n-j...
阅读全文
摘要:题意: 思路: 我们可以发现 到每个点的速度是一样的 那这就成水题了….裸的SPFA跑一哈 搞定//By SiriusRen#include #include #include #include #include using namespace std...
阅读全文
摘要:题意: 思路: 1. 贪心 我们考虑肯定是走最近的最合适 想象自己是一个黑一日游的司机: 1.如果有乘客要上车,那么就让他上,收钱! 2.如果超载了,把距目的地最远的几个乘客踢下去,退钱。 3.行驶到下一站 (摘自http://blog.sin...
阅读全文
摘要:思路: 维护两个堆 一个按时间 (从后到前)的 另一个是按价值(从大到小)的 从时间的堆向价值的堆倒 每回(合法状态下)取当前的堆顶 判一判//By SiriusRen#include #include #include using namespace std;long long...
阅读全文
摘要:贪心好题 ………. 思路: 从大到小凑C 如果不够 再从小到大补满(超过)C//By SiriusRen#include #include #include using namespace std;int n,c,ans,flag,vis[21];struct Mone...
阅读全文
摘要:思路: 抄的题解这叫搜索?难以理解我觉得就是枚举+逼近//By SiriusRen#include #include #include #include using namespace std;int n,recx,recy,x,y;int gcd(int a,int b){ ...
阅读全文
摘要:题意: 思路: 每回枚举去哪个山包 枚举的姿势很重要//By SiriusRen#include #include using namespace std;int n,k,a[1005],l,r,base,cnt,ans,minn,recl,recr,recbase;int m...
阅读全文
摘要:思路: 预处理出在能力值为i的时候 滑雪一次的最小时间f[i][j]表示i时间 j的能力值 最多的滑雪次数我先用vector 把课程按起点push进去1.for(int k=0;k#include #include #include using namespace std;...
阅读全文
摘要:思路: 跟昨天的考试题特别像…..就是裸的Kruskal 把边权设为连接的两个点的点权之和加上边权*2搞定//By SiriusRen#include #include #include using namespace std;int n,m,c[10005],f[10005]...
阅读全文
摘要:思路: f[i][j]i表示集合的组成 j表示选最后一个数 f[i][j]表示能选的方案数 f[i|(1#include using namespace std;#define int unsigned long longint n,K,s[17],f[65535][17];...
阅读全文
摘要:题意: 思路: 先预处理出所有格子的statement statement=1–>只有上边的格子被覆盖 statement=2–>只有下边的格子被覆盖 statement=3–>上下都被覆盖f[i][j][k]表示状态为i时,前j个地方的奶牛,盖k座房子 最少盖住的格子...
阅读全文
摘要:题意: 思路: 贪心 能不覆盖的就不盖 写得很乱 左闭右开的 temp //By SiriusRen#include #include #include #include using namespace std;int n,l,temp,ans;struct Node{int...
阅读全文
摘要:题意: 思路: 拆成二进制枚举 有哪个病毒在 判一判 就好了//By SiriusRen#include #include #include using namespace std;int n,d,k,jy,xx,a[1005],tmp[1005],ans;int main...
阅读全文
摘要:题意: 思路: 用vector存上本出发点能到的地方&成本&有趣指数(用结构体保存) 然后DP就好了 f[i][j]表示到了i 成本为j的有趣指数最大是多少 f[vec[i][k].end][j+vec[i][k].c]=max(f[vec[i][k].end][j+vec[...
阅读全文
摘要:枚举点 每次都搜一遍//By SiriusRen#include #include #include using namespace std;#define N 20005int ans,k,n,m,first[N],next[N],v[N],tot,xx,yy,mark[N],...
阅读全文
摘要:思路:搞了一发链剖//By SiriusRen#include #include #include using namespace std;#define N 88888int n,m,first[N],next[N],v[N],w[N],tot,xx,yy,zz,k;int to...
阅读全文
摘要:思路: 先把能选的路线都预处理出来 按照能停的车的多少排个序 (剪枝1) 搜搜搜 如果当前剩的车÷当前能停车的多少+deep>=ans剪掉 (剪枝2)//By SiriusRen#include #include #include using namespace std;int n...
阅读全文
摘要:思路: 1. 先把那m个排个序 此后每回二分+strncmp一下就好了strncmp是个好东西啊……2. hash判判 (注意 hash会有冲突…………………….)//By SiriusRen#include #include #include using namespac...
阅读全文
摘要:思路: 维护一个单减的序列 序号是单增的 每回二分查找第一个比询问的大的值 我手懒 用得lower_bound//By SiriusRen#include #include using namespace std;#define int long longint m,mod...
阅读全文
摘要:思路: 对于每一个r 要找最小的符合条件的l最优 这时候就要找在这个区间中 d长度的和的最大值 用单调队列更新就好了//By SiriusRen#include #include using namespace std;#define N 2000100long...
阅读全文
摘要:思路: 取个差 在set里面找 更新 (这个用map更好吧 但是我不会……)//By SiriusRen#include #include #include using namespace std;int n,sum[200050][3],ans;char ch[200...
阅读全文
摘要:思路: 先找到每i头奶牛能在的位置 (一段区间) 记为L[i]和R[i]f[j]表示在位置j取到的最小值 每回在范围内更新一哈 //By SiriusRen#include #include #include using namespace std;int n,d,L,...
阅读全文
摘要:也可以用map来搞 样例推出来 就没啥问题了 (先读的是B 然后是A 被坑好久)//By SiriusRen#include #include #include using namespace std;#define mod 10000007int n,T,cas...
阅读全文
摘要:(我是不会告诉你我是抄的http://www.cnblogs.com/scau20110726/archive/2013/02/27/2936050.html这个人的)一开始没有想到要化一下方差的式子 怎么搞都挂……尴尬/*题目固定是8*8,本来想用点的坐标来表示矩形的,但是发现...
阅读全文
摘要:思路: f[i]表示还剩i空间的方案数套个高精 (网上有人把它拆成了两个long long) 其实这道题的高精并不难写…..//By SiriusRen#include using namespace std;int n,k,f[1111][53],flag;int main(...
阅读全文
摘要:题意: 思路: 二分跨度 枚举最低座次 建图:源点向每头牛连边权为1的边 每头牛向当前枚举的B的区间这段连上边权为1的边 所有座次向汇点连边权为牛棚容量的边 判判流量是不是等于n一开始写得是直接枚举答案,在这个答案下枚举座次最低的值 T了。。(然后我看了一发数据 ...
阅读全文
摘要:听说STL会卡T 然后我就试了一发 哈哈哈哈哈哈哈哈哈哈 1000ms卡时过的这很值得我写一发题解了 哈哈哈哈哈哈哈哈哈哈哈哈//By SiriusRen#include #include #include using namespace std;int n,k,mod,...
阅读全文
摘要:思路: 放一个链接是我太懒了 http://blog.csdn.net/mars_ch/article/details/52835978 嗯她教的我(姑且算是吧) (一通乱搞就出来了…)//By SiriusRen#include #include #include #includ...
阅读全文
摘要:思路:easy BFS//By SiriusRen#include #include #include using namespace std;queue >q; int x,y,jyx,jyy,n,xx[]={1,-1,0,0},yy[]={0,0,1,-1},vis[1555]...
阅读全文
摘要:思路: 枚举最大边 像Kruskal一样加边 每回更新一下 就搞定了…//By SiriusRen#include #include #include using namespace std;#define N 10050int n,m,s,t,fx,fy,f[N],s...
阅读全文
摘要:思路: 1.树链剖分+用带标记的线段树维护操作(复杂度O(nlog2n)) 2.树链剖分LCA(TarjanLCA等各种LCA)+差分 复杂度(O(n)—>O(nlogn)之间) 下面就说说怎么差分…… 把mark[x]++,mark[y]++,mark[lca(xx,yy)]–...
阅读全文
摘要:思路: 先搞出来DFS序 进入这个点 +1 出这个点 -1线段树维护前缀和 (因为还要修改) 搞定 修改的时候只修改底下节点就OK了 (边权–>点权 不多说)//By SiriusRen#include #include #include using n...
阅读全文
摘要:呃呃 看到了这道题 没有任何思路…… 百度了一发题解 说要用约数和定理 就查了一发 http://baike.so.com/doc/7207502-7432191.html (不会的可以先学习一下)然后呢 我们考虑枚举约数 先线性筛一遍10^5以下的 10^5以上的...
阅读全文
摘要:预处理出100*100以内的最优解贪心走日判断是0*4还是2*4搞定//By SiriusRen#include #include #include using namespace std;int sx,sy,ex,ey,vis[105][105],ans;char xx[]={2...
阅读全文
摘要:思路: DP啊 f[i][j]表示第i场能否到达j音量 if(j>=xx)f[i][j]=max(f[i-1][j-xx],f[i][j]); if(j+xx#include using namespace std;int n,bl,ml,xx;int f[55][1005];...
阅读全文
摘要:被某人拉进了坑 完完全全被坑一天的题…… 题意: 正解思路: 先把每一个点搜一遍 预处理出它能在一步之内到的所有点 并连边 然后用一个类似DP的东西把方案数加起来就搞定了 (其实 也不是很难)但是 我为什么会挂呢 首先 我想偷个懒,想少写一个BFS 就直接按照原来的边...
阅读全文
摘要:思路: f[i][j]表示前i天能做j道题 (是做 不是做完) if(f[i-1][k]) if(suma[j]-suma[k]+g[i-1][k]#include #include using name...
阅读全文
摘要:思路: f[i][j][k]表示i到j匹配了字母k if(m,n能匹配上k) f[i][j][k]|=f[i][l][m]&f[l+1][j][n] 一个大枚举 就OK了~//By SiriusRen#include #include #include using namespa...
阅读全文
摘要:思路:考虑时光倒流 先把没有被删掉的点之间的边加上去 再从后向前加边 用并查集判断连通性即可//By SiriusRen#include #include using namespace std;#define N 400050int n,m,xx,yy,q[N],f[N],an...
阅读全文
摘要:思路: 我们很容易发现 一个数开根号 开几(很小)次 就到了1 1 再怎么开 都是1 由于这个性质 我们就可以用并查集 了//By SiriusRen#include #include #include using namespace std;#define int lo...
阅读全文
摘要:思路: 用线段树模拟题中的操作就好 (标记异或 长度=区间总长度-当前已开灯的长度)//By SiriusRen#include using namespace std;#define N 666666int n,m,op,xx,yy,tree[N],lazy[N];void...
阅读全文
摘要:思路: f[i][j][k] 表示 第i行第j列 用了k中颜色的最多涂块数量 f[i][j][k]=max(f[i][j][k],f[i][l][k-1]+sum1[i][j]-sum1[i][l]); g[i][j]表示前i列 用了k中颜色的最多涂块数量 g[i][k]=max...
阅读全文
摘要:思路: 对于读入的矩阵 直接跑一遍匈牙利就好了//By SiriusRen#include #include #include using namespace std;int T,n,a[222][222],vis[222],match[222];bool dfs(int x){ ...
阅读全文
摘要:题意: 思路: 对于每一个区间 [a,b] [a+1,b-1]肯定是比a,b低至少1的 因为题目要求最大值 所以就直接差分一下 搞之 (复杂度 O(n)) Discuss里说有重复的数据 用set判一下重就好了复杂度O(nlogn)//By SiriusRen#in...
阅读全文
摘要:题意: 思路: 先把每个区间的前缀和搞出来 为sum[i][j]然后我们发现 对于一段 每个前缀和之差是定值的情况 都减去 sum[i][0] 是同一个数所以我们就Hash一遍 判一判hash到同一个数的时候check一下 就OK了//By SiriusRen#inc...
阅读全文
摘要:题意:求区间第k小 思路: 线段树 每个节点上保存 当前区间已经排序好的序列 (归并一下就好了嘛 复杂度 O(l)的) 这样建树的时空复杂度都是 O(nlogn)的 对于 每次询问 二分一个答案 在树上upper_bound一下 判断一下 这样 查询的复杂度 就成O...
阅读全文
摘要:题意: 思路: 先枚举一下k 贪心:如果当前是B那么就翻 差分一下序列 mod2 就OK了//By SiriusRen#include #include #include using namespace std;int n,s[5555],reck,reans=0x3ff...
阅读全文
摘要:题意: 思路: 1.Floyd传递闭包 n^3/32 勉强卡过去吧…… 2.用邻接表搞Floyd 也是勉强卡过去…… 最后用n*(n-1)-矩阵中为1的个数就OK了传递闭包://By SiriusRem#include #include #include using na...
阅读全文
摘要:题意: 思路: 网络流 重在建图…建完了图 就一切都好说了这道题 我的想法是 先把源点和所有的食品连上边 (容量为1)再把食品和对应的奶牛连上边 (容量为1)这个时候要拆点 因为每只奶牛只能才吃1种东西嘛就把奶牛拆成两个点两个点之间连上一条容量为1的边把奶牛分裂的第...
阅读全文
摘要:这就是以后我的可持久化线段树的模板啦~//By SiriusRen#include #include #include using namespace std;#define N 100010int n,m,cnt,b[N],cpy[N],now,root[N];struct Tr...
阅读全文
摘要:题面: 思路:这里面有坑啊啊啊….. 先普及一下姿势:判断无向图欧拉路的方法: 图连通,只有两个顶点是奇数度,其余都是偶数度的。判断无向图欧拉回路的方法: 图连通,所有顶点都是偶数度。重点:图连通!!思路: 先看看图是否联通(就是所有边都能经过么) 再判判是不是欧拉路 经过的次数...
阅读全文
摘要:思路: 首先 先Dijkstra一遍 找出来最短路 不是最短路上的边都不要 然后呢 套个Dinic模板就好了……求个最小割输出 大功告成~~//By SiriusRen#include #include #include #include using namespace...
阅读全文
摘要:这就是以后我的板子啦~~~#include #include #include #include using namespace std;#define N 444int tot,next[N],first[N],w[N],v[N],n,m,ch[N];void add(int f...
阅读全文
摘要:Description 国家有一个大工程,要给一个非常大的交通网络里建一些新的通道。 我们这个国家位置非常特殊,可以看成是一个单位边权的树,城市位于顶点上。 在 2 个国家 a,b 之间建一条新通道需要的代价为树上 a,b 的最短路径。 现在国家有很多个计划,每个计划都是这样...
阅读全文

浙公网安备 33010602011771号