- 博客(5)
- 收藏
- 关注
原创 poj 3905 perfect election
一场选举中,每个选民有两条意见(或关系),判断是否存在一个选举方案不违背所有选民的意见。 2-SAT问题,具体的做法:每个选民的两个意见a,b之间为或关系,因此可以推出(!a,b)或者(!b,a),这样就可以使用有向线段连接!a到b,!b到a。将所有的意见用有向图表示后,使用tarjan算法求强连通子树,最后判断同一个子树中是否存在违背的意见。 代码块加上了自己的理解,注释。#include <iostream>#include <cstring>#include
2020-05-27 18:26:45
152
转载 二分法边界问题
二分法中最痛苦的问题:确定边界条件。下面从一个最简单的例子说起:LeetCode 704. 二分查找class Solution: def search(self, nums: List[int], target: int) -> int: left, right = 0, len(nums) # 确定左右边界 while left < right: # 终止条件 mid = left + (right-left)//2 #
2020-05-25 23:25:15
688
原创 poj 3903 stock exchange
求给定序列中长度最大的递增子序列 题目中给定的序列长度为10的5次幂,若假设数组dp[i]存储序列中以第i个数字结尾的最大递增子序列长度,此时算法的复杂度为n的2次幂,会引起超时。(一般情况下限制1s内,不能超过10的8次幂) 仍然使用动态规划解决这个问题,假设数组dp[i]存储的是所有递增子序列长度为i的序列中,末尾数字最小的序列的末尾数字。意思是,dp数组中同样长度的递增子序列末尾数字大的会被末尾数字小的取代,因为末尾数字越小,在后继的序列中优势更大。这样数组dp中维护的便是一个递增的序列,
2020-05-25 22:57:04
150
原创 poj 3904 求四元互质集合
从给定的集合中求互质四元组的个数。 解题思路:先求解非互质四元组的个数,在总体四元组个数减去这个数目。求非互质四元组即求公因数大于1的四元组数目,因此,使用公因数d把集合中的元素划分成不同的子集,每个子集中的四元组一定是非互质的。还有一点需要考虑的是,不同子集中可能蕴含相同的非互质四元组。可以使用容斥原理解决这个问题,具体的方法是对公因数d进行质因数分解,若d可以分解成奇数个质数,就在非互质四元组总数中加上公因数d对应的非互质四元组,若为偶数则减去。#include<iostream>
2020-05-24 21:38:44
194
原创 poj 1026 加密问题
如何改变文本的样式 题目大意是,给定一串密匙,求源码经过密匙加密k次后的内容。加密的规则是:源码第i个字母调换到密匙中ai指定的位置。同时,源码长度小于等于密匙长度,当源码长度小于密匙长度时,在源码后使用空格填充保证二者长度相等。 最开始使用的直接模拟加密过程的方法,会超时。明显要考虑加密过程中加密的内容周期问题,于是直接求了整个源码字符串的周期,这样也会超时。实际上,密匙长度在题目中限制为最大200,直接求整个字符串的周期,这个值也可能很大。参考了其它同学的思路,分开求每个字符的周期,然后对每个字
2020-05-19 16:02:26
141
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人