
杂题
文章平均质量分 65
NightRaven
cust
展开
-
n个数求第k大
借用快排的思想,每次选取一个参考值,把区间分成两块,左边都小于参考值,右面都大于参考值(中间如果有剩下就是和参考值相同),然后根据k再去选择排左面还是排右面def select(a,l,r,k): i = l j = r print 'bg',i,j,k key = a[(l+r)>>1] while i<=j: while a[i]<key: i += 1 while a[原创 2016-02-29 00:39:16 · 606 阅读 · 0 评论 -
hdu4689 Turn the pokers 组合
m张相同的扑克牌,n个操作,每次操作可以选择fa原创 2014-07-23 21:00:31 · 763 阅读 · 0 评论 -
la3486 Cells 图的dfs
给一棵树,若干个询问,每次询问两个节点x,y,问x是否为y的祖先原创 2014-06-04 16:38:51 · 696 阅读 · 0 评论 -
zoj3529 A Game Between Alice and Bob 博弈
N个数字,两人轮流操作,每次操作ke原创 2014-05-09 11:08:00 · 630 阅读 · 0 评论 -
codeforces 7D Palindrome Degree 字符串hash
如果一个长度为n的字符串s,如果前原创 2014-05-09 14:18:33 · 922 阅读 · 0 评论 -
la4513 Stammering Aliens 字符串hash
给一个m和一个字符串,求最长的至少重复出现m次的子串。拿来lianl原创 2014-05-09 12:08:47 · 626 阅读 · 0 评论 -
zoj3267 Treasure Hunt II 模拟+枚举
N个城市,每个城市有一些金币,现在A,B两个人在同一个起点P,每人每秒可以从城市i移动到城市i+1或者i-1,并且任何时刻两人的距离不能超过M,求时间T内,两人最多能拿到多少金币。按照题意直接模拟就行,思路不难,代码挺蛋疼,好多细节的地方要考虑。考虑到每个城市的钱只能拿一次,那么两人如果往一个方向走是没意义的,所以一开始两人从起点向两侧走,直到距离为M,或者是时间耗尽了,如果时间耗尽,直接输出答案原创 2014-03-26 22:45:34 · 739 阅读 · 0 评论 -
UVA 11178 Morley's Theorem
给一个三角形,由各点引出两条三等分线,在三角形中原创 2014-04-07 18:50:09 · 595 阅读 · 0 评论 -
UVA 10652 Board Wrapping 凸包模板
给若干个矩形,求出凸包,并且计算矩形面积和占凸包面积的百分比。原创 2014-04-17 12:15:35 · 576 阅读 · 0 评论 -
UVA 11881 Internal Rate of Return
f(x)=c0+c1*(1+x)^(-1)+c2*(1+x)^(-2)+...+cn*(1+x)^(-n)=0;保证c00原创 2014-05-01 18:28:59 · 686 阅读 · 0 评论 -
zoj3641 Information Sharing 并查集+set
一间教室,起初是空的,有三种命令1: "arrive Name m a1 a2 ..am" 名字为 Name的小朋友进来了,并且携带了m条信息,分别是a1,a2...am2: "share Name1 Name2" 名字为Name1,Name2的小朋友分享他们的信息。3: "check Name" 检查名字为Name的同学,并输出这个同学当前了解多少条不同的信息。原创 2014-03-20 21:13:38 · 641 阅读 · 0 评论 -
hdu2089 & hdu3555 基础数位DP
统计区间内有多少个符合要求的数,2089要的是不含4和62的数,3555要的是不含49的数..都是基础的数位统计问题,直接贴模板了...话说数位dp居然还有模板,果然是too young....2089#include #include #include #include #include typedef long long ll;using namespace std;in原创 2014-03-07 18:49:43 · 701 阅读 · 0 评论 -
poj1442 Black Box treap
N个数,在插入第B[i]个数之后,查询当前集合中第i小的数是多少。treap模板题...#include #include #include #include #include using namespace std;typedef long long ll;const int maxn=101000;int pre[maxn];int ch[maxn][2];int si原创 2014-03-04 23:20:42 · 815 阅读 · 0 评论 -
zoj 3762 Pan's Labyrinth 几何+贪心
跟n个点,在所有构成的三角形中,求最大的高。在网上看到了一种贪心的做法..虽然不确定对,但好像没找到什么反例...首先对每个点,求出距离他最远的点,然后枚举每个点就成了枚举线段了,在枚举第三个点,记录最大的高就好了,复杂度O(n^2);#include #include#include#include#include#include#include#include#incl原创 2014-03-04 23:31:44 · 831 阅读 · 0 评论 -
zoj 3757 Alice and Bob and Cue Sports 模拟
两个人打台球,初始状态为n个编号不同的球和一个母球(编号为0),每个球的分数即它的编号,每次操作时,当前的目标球为台面上球的最小值,操作犯规的话会给对手加上若干分,犯规的情况有:1 母球没有打到任何球,对手+目标球的分数2 母球没有落袋,但是母球第一次撞击没有撞到目标球,或者是第一次撞击同时撞击了1个以上的球,对手+第一次同时撞击到的球中编号最大的分数3 母球落袋并且撞击到了至少一个原创 2014-03-03 00:00:22 · 1718 阅读 · 3 评论 -
codeforces 392A Blocked Points 枚举
题意很繁琐..转化过来基本就是在平面上给一个半径为n的圆,求圆内有多少个点和圆外至少一个点的欧几里得距离恰好为1。想一下会发现四个象限其实是对称的,求一个象限的解*4就行,对一个象限内的点,发现一个象限内也可以分成两半,所以就是枚举出来1/8个圆的点就可以了...以第一象限为例的话,枚举的结束条件就是x>y。#include #include #include using namespa原创 2014-02-19 15:11:08 · 773 阅读 · 0 评论 -
hdu1846 Brave Game 标准巴什博奕
巴什博奕的原型..m+1必败,否则先手必胜。#include #include #include using namespace std;int dp[2000];int n,m,x,y;int main(){// freopen("in.txt","r",stdin); int tt; cin>>tt; while(tt--) {原创 2014-02-16 06:09:01 · 617 阅读 · 0 评论 -
codeforces 451D Count Good Substrings 枚举
一个字符串,可以jiang原创 2014-07-25 14:51:56 · 796 阅读 · 0 评论 -
zoj3789 Gears并查集
有N个齿轮,三种操作操作L x y:把齿轮x原创 2014-06-02 09:48:26 · 1192 阅读 · 3 评论 -
hdu4726 Kia's Calculation 贪心
给两个数,进行不进为加法()原创 2014-09-02 19:26:03 · 607 阅读 · 0 评论 -
leetcode 15. 3Sum
给一个数组,找出所有的不相同的三元组相加为0.先排序,然后循环最小值,剩下两个值用two point从两侧向中间跑一遍,求出所有结果即可,复杂度o(n^2)。注意处理下重复class Solution(object): def threeSum(self, nums): """ :type nums: List[int] :rtype: Li原创 2016-02-27 23:48:51 · 446 阅读 · 0 评论 -
leetcode 14. Longest Common Prefix
给n个字符串,求最长公公前缀。直接逐位扫判断就行。class Solution(object): def longestCommonPrefix(self, strs): """ :type strs: List[str] :rtype: str """ lenS = len(strs) i原创 2016-02-27 01:12:39 · 417 阅读 · 0 评论 -
leetcode 13. Roman to Integer
给一个罗马数字,转化成整数。这个就简单点了,直接从前往后扫,只需要注意一个规则,如果小单位在大单位前,小单位位负,小单位在大单位后,小单位为正。class Solution(object): def cov(self,s): if s == 'I': return 1 elif s == 'V': return 5 elif s == '原创 2016-02-27 01:11:39 · 385 阅读 · 0 评论 -
leetcode 12. Integer to Roman
给一个整数(1-3999),转化成落马数字。直接模拟吧,注意特盘4和9的情况。罗马数字的规则参考http://zhidao.baidu.com/link?url=aFXj4HeKQCT1gv38YE7jjHz2f0KUiGS2E2yoCMRV4c3KDa9HnWo1FOIJR6l1MthPHSsEKMLp08VfkhiZ7wh3KK大致以下几条: (1)基本数字Ⅰ、X 、C 中的任何原创 2016-02-27 01:08:50 · 391 阅读 · 0 评论 -
leetcode 11.Container With Most Water
给一个数组a[],整数对(i,ai)表示一个立在x轴上的隔板,求两个隔板使得隔板见可以存储最大容积的水。因为一对隔板存储的水量取决于低的板子,所以维护两个指针lp,rp如果a[lp]>a[rp],lp向后推的话得到的结果不可能比原来大,而rp向左推则可能会得到更大的答案,所以维护两个指针从两头向中间推一遍就好。class Solution(object): def maxArea(se原创 2016-02-27 01:06:46 · 356 阅读 · 0 评论 -
leetcode 9. Palindrome Number
判断一个数是否为回文数,直接循环判断class Solution(object): def isPalindrome(self, x): """ :type x: int :rtype: bool """ s = str(x) lenS = len(s) f原创 2016-02-27 00:59:00 · 352 阅读 · 0 评论 -
leetcode 8. String to Integer (atoi)
手写字符串转整数函数。细节好多,首先要处理掉前导空格,然后处理正负号,接下来往后处理时,处理到非数字字符时,立即结束返回前面得到的整数,最后如果溢出的话,返回离它最近的一个整数class Solution(object): def myAtoi(self, str): """ :type str: str :rtype: int原创 2016-02-27 00:58:02 · 341 阅读 · 0 评论 -
leetcode 7. Reverse Integer
给一个数,求各位翻转后的结果。还是模拟,处理下正负号就行import mathclass Solution(object): def reverse(self, x): """ :type x: int :rtype: int """ flag = 0 if (x < 0) :原创 2016-02-27 00:54:48 · 334 阅读 · 0 评论 -
leetcode 6. ZigZag Conversion
给一串N型排列,把它转换成行排列。直接模拟,可以注意到,第一行和最后一行,间距都是2*step-2,第二行开始两个间距为2*step-4,2然后第一个间距依次+2,第二个间距依次-2class Solution(object): def convert(self, s, numRows): """ :type s: str :type n原创 2016-02-27 00:53:29 · 357 阅读 · 0 评论 -
leetcode 5. Longest Palindromic Substring
给一个字符串求最长公共字串。直接上o(n)的Manacher,方法网上很多讲的都挺详细,需要的自行百度吧class Solution(object): def pre(self,s): lenS = len(s) i = 0 res = [] while i < lenS: res.append('原创 2016-02-26 00:28:43 · 380 阅读 · 0 评论 -
leetcode 3
给一个字符串,求出最长的没有重复字符出现的字串。two point直接推就好,右侧指针无法后移时更新一下答案class Solution(object): def lengthOfLongestSubstring(self, s): """ :type s: str :rtype: int """ i原创 2016-02-25 01:35:18 · 393 阅读 · 0 评论 -
leetcode 2
给两个数值域小于10的单链表,按头对齐后对应位置相加,超过10要进位,够造成一个新的单链表。。。直接相加,然后构造链表,处理下进位就行了# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# sel原创 2016-02-25 01:33:08 · 351 阅读 · 0 评论 -
leetcode 1
最近在学python,正好拿leetcode的题来练练基本语法也顺便补补代码量。。。好久没写代码了。。。题意大概是给一个数组和一个数,求两个下标使得这两个下标的数之和等于目标数。直接循环一个数,然后检查另一个数在不在数组里并且不能是第一个数本身,用py自带的函数解决就行了class Solution(object): def twoSum(self, nums, target)原创 2016-02-25 01:29:19 · 329 阅读 · 0 评论 -
hdu5015 233 Matrix 矩阵快速幂
.......感觉没什么好说的,推出矩阵原创 2014-09-16 21:05:41 · 663 阅读 · 0 评论 -
hdu4717 The Moving Points 三分
给n个点,和每个原创 2014-09-02 18:07:55 · 677 阅读 · 0 评论 -
hdu4714 Tree2cycle 树上乱搞
给一棵树,每次操作可以删一条边或者加一条边,原创 2014-09-02 16:36:20 · 724 阅读 · 0 评论 -
hdu1847 SG函数构造
仅有一堆的S-NIM游戏,求出SG(x),0必败,非0必胜。另外这题DP也可以做,根据方案数从小到大递推上去就行了。#include #include #include using namespace std;typedef long long ll;int s[100];int f[2200];int n,m,k;int mex(int p){ int g[100]原创 2014-02-16 06:07:05 · 754 阅读 · 0 评论 -
hdu1525 Euclid's Game 博弈
这题算是个想法题吧,给两个数a,b,两个人轮流行动,每次操作可以把大的数减去小的数的k倍(不能减成负的),先得到0的胜利。假设a>b,令z=a/b,分两种情况讨论,若z==1,那么先手一次必须达到b,a%b,若z>1的话,先收方可按自己想法得到b,a%b或合适把该状态让给对方,而对b,a%b状态递归求解,可以确定该状态的胜负情况,所以a/b>2的时候,先手必胜,否则就辗转相减,以a==b || a原创 2014-02-16 06:03:31 · 574 阅读 · 0 评论 -
hdu4081 Qin Shi Huang's National Road System MST+树形DP
平面内有n座城市,每座城市有一个人口数,现在可以预先不用任何代价在两个城市之间连一条边,并且把被连的两个城市的人口数之和记为A,在添加了这一条边的基础上,求一颗最小生成树,权值和记为B,求最大的A/B。 n不超过1000,可以先用普利姆求一个最小生成树,然后以每个城市为起点,做一个DFS,遍历的过程中,记录下起点到当前节点的路径上最长的一条边ds,那么遍历到当前城市k时, 起点和k的人口数之和/(原创 2013-10-05 11:30:30 · 943 阅读 · 0 评论 -
sgu 134 Centroid 树的重心
对于一棵树,定义点k,删掉点k后,产生的几个联通量中节点数最大值 最小时,k为树的重心。遍历一边,用两个数组,size[i]表示i和i的子树中的节点数之和,sonsize[i]表示节点最多的子树的节点数,(n-size[i]就是这个节点没有枚举到的那个分支的节点数),然后枚举各个节点就可以了。 #include #include #include #include #incl原创 2013-11-26 19:23:37 · 725 阅读 · 0 评论