POJ
如题
Yuhan の Blog
这个作者很懒,什么都没留下…
展开
-
POJ 2217 Secretary(后缀数组+高度数组)
题目链接:2217 Secretary思路:将两个字符串用一个不会出现的字符,如$连接起来,然后求此字符串的高度数组,从前往后遍历所有i,当sa[i]和sa[i+1即两个子串的起始位置在两个不同的字符串中时(即我们相加的这两个字符串),此时i的height即为公共子串长度,我们找到最大值即可代码:#include<iostream>#include<strin...原创 2019-12-23 20:55:21 · 122 阅读 · 0 评论 -
POJ 2352 Stars(树状数组)
思路:(刚开始想歪了,想着先离散然后用二维BIT来做,结果内存根本hold不住QAQ)这道题既然是按y升序给我们的序列,我们在遍历到这个序列时,查一下有多少x小于我们当前的x就ok了,区间求和、单点修改自然用树状数组最方便了~代码:#include<iostream>using namespace std;const int maxn=15000+5;const in...原创 2019-12-04 18:07:36 · 164 阅读 · 0 评论 -
POJ 2155 Matrix(二维BIT维护差分数组)
思路:1.这道题的要求是让我们在二维的情况下进行区间修改、单点查询;2.我们首先转变一下思维,将取反变成+1,如果该点是奇数,则说明该点值为1,否则为0;3.我们考虑一下在一维的情况下如何进行区间取反,单点查询;这里我们需要有差分的思想,我们设差分数组为d[],原数组为a[],我们需要做的就是对于每个i,有d[1]+d[2]+...+d[i]=a[i],即原数组a[i]是d[i]的前缀和数...原创 2019-12-04 10:33:49 · 218 阅读 · 0 评论 -
POJ 3320 Jessica's Reading Problem(尺取法)
思路:1.首先我们需要记录知识点总数;2.其次定义map<int,int>来存储我们目前每个知识点出现的次数;3.对于每个s指向开头,我们定义t指向末尾然后逐个遍历,直到所有的知识点都被覆盖,此时如果s指向的知识点出现的次数不为1(肯定大于0,因为都覆盖了),说明后面有同样的知识点,我们往后移s直到s指向的知识点出现的次数为1,此时t-s就是覆盖的页数;4.然后依照同样规律继...原创 2019-12-02 15:53:35 · 124 阅读 · 0 评论 -
POJ 3061 Subsequence(尺取法)
思路:1.假设序列是a[],如果有a[s]+a[s+1]+...+a[t-2]<S且a[s]+a[s+1]+...+a[t-2]+a[t-1]>=s,那么t-s就是以s为起点的最短序列长度;2.并且a[s+1]+a[s+2]+...+a[t-2]必定小于S那么在s+1的情况我们只需要让末端继续从t-1开始就可以了;3.我们让s从1开始逐个往后遍历,这种方法复杂度只有O(n)O(...原创 2019-12-02 15:45:36 · 99 阅读 · 0 评论 -
POJ 1064 Cable master(二分法寻找最优解)
思路:1.题意是找到一个长度,可以使所给的绳子能切割成k个这样长度的绳子,最小精度是厘米;2.方法就是二分查找,每次比较此次的mid值是否符合题意;3.因为使用double我们无法用left<=right终止循环,那就循环足够多的次数来提高精度即可;4.最后输出不可以直接使用.2f,因为会四舍五入;代码:#include<iostream>#include<...原创 2019-12-02 15:37:42 · 498 阅读 · 0 评论 -
POJ 3280 Cheapest Palindrome(区间dp)
思路:定义dp[i][j]为将i到j位置的字符串转换为回文串,我们从小到大放大这个区间,定义w[c-'a']为字母c的花费,可得dp[i][j]={dp[i+1][j−1]s[i]==s[j]min(dp[i+1][j]+w[s[i]−′a′],dp[i][j−1]+w[s[j]−′a′])s[i]!=s[j]dp[i][j]=\begin{cases}dp[i+1][j-1]&...原创 2019-12-01 18:41:15 · 145 阅读 · 0 评论