02 2019 档案

摘要:思路:将这个十进制的数整数部分除16取余,小数部分乘16取整。 这里只写了整数部分的转换: #include <bits/stdc++.h> #define inf 0x3f3f3f3f #define MAX 1000000000 #define mod 1000000007 #define FR 阅读全文
posted @ 2019-02-28 10:03 sykline 阅读(3975) 评论(0) 推荐(0) 编辑
摘要:题目: 给出一串表示矩阵相乘的字符串,问这字符串中的矩阵相乘中所有元素相乘的次数。 思路: 遍历字符串遇到字母将其表示的矩阵压入栈中,遇到‘)’就将栈中的两个矩阵弹出来,然后计算这两个矩阵的元素相乘的次数,累加就可以了。 PS:注意弹出的矩阵表示的先后顺序。 代码: #include <bits/s 阅读全文
posted @ 2019-02-27 23:17 sykline 阅读(166) 评论(0) 推荐(0) 编辑
摘要:题目: 给出一个序列,问将1,2,3,4……按从小到大的顺序入栈,能否得到给出的序列。 思路: 用stack模拟就可以了。 当前的cnt如果小于a[i],就将cnt入栈,否则就判断栈顶是不是和a[i]相等,如果相等则弹出,如果不相等,就不能获得给出的序列。 代码: #include <bits/st 阅读全文
posted @ 2019-02-27 20:45 sykline 阅读(165) 评论(0) 推荐(0) 编辑
摘要:题目: 给定一个4*4的棋盘和棋盘上所呈现出来的纸张边缘,问用不超过6张2*2的纸能否摆出这样的形状。 思路: dfs纸的张数,每一张中枚举这张纸左上角这个点的位置,暴力解题就可以了。 这个题的覆盖太恶心了,很容易搞混~~~(因为搞混一直TLE+WA…………) 代码: #include <bits/ 阅读全文
posted @ 2019-02-21 18:27 sykline 阅读(203) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 把时间当做距离利用Dijkstra算法来做这个题。 前提:该结点e.c<=e.a,k = d[v]%(e.a+e.b); 当车在这个点的1处时,如果在第一个a这段时间内能够通过且更小的话,那时间就更新为d[e.to] = d[v]+e.a-k+e.c; 当车在这个点的1处时,如果在第 阅读全文
posted @ 2019-02-21 14:04 sykline 阅读(207) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 直接套最大流的模板就OK了,注意一下输出的格式。 代码: #include <bits/stdc++.h> #define inf 0x3f3f3f3f #define MAX 1000000000 #define mod 1000000007 #define FRE() freop 阅读全文
posted @ 2019-02-19 11:12 sykline 阅读(255) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: dp[j][h]表示选取了j个向量,且高度为h,利用01背包来解决问题。 没选当前的向量:dp[j][h] = dp[j][h]; 选了当前的向量:dp[j][h] = dp[j-1][h-p[i].y]+2*p[i].x*(h-p[i].y)+p[i].area;(p[i].are 阅读全文
posted @ 2019-02-19 10:00 sykline 阅读(219) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 求两个串的最长公共子序列,则这个最短的串就是给出的两个串的长度和减去最长公共子序列的长度。 状态转移方程: 如果s[i-1]==t[j-1]就有dp[i][j] = dp[i-1][j-1]+1; 否则有dp[i][j] = max(dp[i-1][j], dp[i][j-1]) d 阅读全文
posted @ 2019-02-17 11:33 sykline 阅读(208) 评论(0) 推荐(0) 编辑
摘要:题目&分析: 思路: Floyd变形(见上述紫书分析),根据题目要求对应的改变判断条件来解题。 代码: #include <bits/stdc++.h> #define inf 0x3f3f3f3f #define MAX 1000000000 #define FRE() freopen("in.t 阅读全文
posted @ 2019-02-15 16:14 sykline 阅读(243) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 利用Floyd求传递闭包(mp[i][j] = mp[i][j]||(mp[i][k]&&mp[k][j]);),当mp[i][j]=1&&mp[j][i]=1的时候,i 和 j就是在同一个电话圈中。 代码: #include <bits/stdc++.h> #define inf 阅读全文
posted @ 2019-02-15 15:51 sykline 阅读(155) 评论(0) 推荐(0) 编辑
摘要:题目: 输入两个格子的编号a和b(a,b≤10000),求最短距离。例如,19和30的距离为5(一条最短路是19-7-6-5-15-30)。 思路: 如图建立坐标系,然后看两个点的向量如果位于二四象限答案为向量坐标绝对值的和,向量位于一三象限答案为向量坐标绝对值的最大值。 看网上的博客的思路……(菜 阅读全文
posted @ 2019-02-10 18:56 sykline 阅读(224) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 如图E:图中a、b、c、d是有向图D中的顶点,如果ac、bc都指向cd,而ac又指向ce,那bc同样应该有一条指向ce的边不然就不能从图D转换来。所以直接枚举顶点就可以了。 代码: #include <bits/stdc++.h> #define inf 0x3f3f3f3f #de 阅读全文
posted @ 2019-02-07 12:12 sykline 阅读(469) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 读完题之后有了以下想法: 当遇到下雨的天,就找这个湖泊上一次下雨满了之后又一次不下雨的日期。有就在这个日期下记录被神龙喝干的湖的编号,没有就是不符合题意。 这个想法是对的,但是却被代码卡的死死的。知道看到了大佬用set写的…… set本身是有序的,而且也有二分查找的方法。 代码: # 阅读全文
posted @ 2019-02-05 17:50 sykline 阅读(201) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 预处理出a[i]在哪个范围区间内是最小的,然后直接遍历a数组求答案就可以了。 这个预处理的技巧巧妙的用了之前的处理结果。(大佬tql) 代码: #include <bits/stdc++.h> #define inf 0x3f3f3f3f #define MAX 1e3 #defin 阅读全文
posted @ 2019-02-05 16:28 sykline 阅读(148) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 读完题之后第一时间想到的是尺取法来做这个题,结果让自己写写崩了,还是练得少!! 到网上搜了一下学习了大佬的标记方法,用一个变量来判断是不是都已经出现,要比每次都判断一下快超多。 代码: #include <bits/stdc++.h> #define inf 0x3f3f3f3f # 阅读全文
posted @ 2019-02-03 17:42 sykline 阅读(195) 评论(0) 推荐(0) 编辑
摘要:题目: 给出k个互不相同的证书组成的序列Ni,判断是否存在4个证书Np、Nq、Nr、Ns(1≤p<q<r<s≤k)使得Nq>Ns>Np>Nr或者Nq<Ns<Np<Nr。 思路: 有两种情况<小、最大、最小、大>、<大、最小、最大、小>,枚举第1个和第4个数,用RMQ查询这两个数之间的最大值和最小值, 阅读全文
posted @ 2019-02-02 17:11 sykline 阅读(471) 评论(0) 推荐(0) 编辑
摘要:题目: 给定平面上n(n≤105)个点和一个值D,要求在x轴上选出尽量少的点,使得对于给定的每个点,都有一个选出的点离它的欧几里得距离不超过D。 思路: 先自己造区间,然后贪心选点就可以了。之前做过一到类似的题目还是没有一眼看出来。 区间的造法,就是以给出的点为圆心,以D为半径画圆,这个圆与x轴的相 阅读全文
posted @ 2019-02-02 12:32 sykline 阅读(171) 评论(0) 推荐(0) 编辑
摘要:题目: 把1~n(n≤500)放到一个圆盘里,每个数恰好出现一次。每次可以选4个连续的数字翻转顺序。问能不能变成1.2.3....n的顺序。 思路: 这样的题的规律真的是一点都不好推,看了网上的博客知道只有n为奇数且给出的序列的逆序数为奇数的时候,这种情况下是不能完成的,其余的情况都可以。 如果n为 阅读全文
posted @ 2019-02-02 10:46 sykline 阅读(239) 评论(0) 推荐(0) 编辑
摘要:题目: 输入一个1~n(1≤n≤300)的排列,用不超过96次操作把它变成升序。每次操作都可以选一个长度为偶数的连续区间,交换前一半和后一半。输出每次操作选择的区间的第一个和最后一个元素。 思路: 注意紫书上的提示,2n次操作就可以完成了。从头开始遍历序列,属于该位置上的元素,可以在两步之内交换到这 阅读全文
posted @ 2019-02-02 09:35 sykline 阅读(165) 评论(0) 推荐(0) 编辑
摘要:题目: 如果一个序列的任意连续的子序列中至少有一个只出现一次的元素,则称这个序列是不无聊的。输入一个n(n≤200000)个元素的序列A(各个元素均为109以内的非负整数),判断它是不是不无聊的。 思路: 分治法,平常确实用的非常的少,这次借这个题目熟悉一下。代码思路是学习的紫书上的代码的。 在[L 阅读全文
posted @ 2019-02-01 12:36 sykline 阅读(213) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示