题目链接:http://codeforces.com/problemset/problem/371/C
这题一开始用的贪心,但WA掉了。
正解是二分一个答案,查看能否用现有的钱买到相应的食材。
题目链接:http://codeforces.com/problemset/problem/371/C
这题一开始用的贪心,但WA掉了。
正解是二分一个答案,查看能否用现有的钱买到相应的食材。
这题是二分+贪心,关键在于贪心策略,移走石头即合并线段,从左向右扫描一个坐标区间,如果长度合适(大于等于二分的答案)就移动左端点,不合适就固定左端点同时进行一次合并(计数器加一),如果合并次数在m以内就认为存在一个方案。
笔记主要参考:Python网络爬虫与信息提取
概念 | 解释 |
---|---|
Tag | 标签 |
Name | 标签名 .name |
Attributes | 属性 .attrs 返回值为字典类型 |
NavigableString | 字符串 .string |
Comment | 注释 .comment |
.parent < Tag >
.parents < Generator >
.contents < list >
只会列出下一层孩子节点.children < list_Iterator >
用于for循环遍历,只会遍历下一层孩子节点.descendants < Generator >
用于for循环遍历,会递归遍历子树所有孩子节点.next_sibling < Tag >
.previous_sibling
.next_siblings < Generator >
.previous_siblings
JSON是一种用有类型的键值对表达信息的方式(如ss的配置文件)
1 | "key" : "value" |
YAML是一种用无类型键值对表达信息的形式(如hexo的_config.yml)
1 | key : value |
各自特点
<>.get()
获取某个Tag下某项属性的值<>.find_all(name, attrs, recursive, string, \*\*kwargs)
id = 'link1'
这样直接搜索属性<>.find_all('p', string = 'Python Course')
1 | <>.find_all()等价于<>() |
·· / ·– ·· ·-·· ·-·· / ·–· · ·-· ··· ·· ··· - / ··- -· - ·· ·-·· / ·· / ·– ·· -·
笔记中的解释出处:Python网络爬虫与信息提取
r = requests.get("http://www.google.com", timeout = 30)
对象成员 | 解释 |
---|---|
r.status_code | HTTP请求的返回状态,200表示连接成功,404表示失败 |
r.text | HTTP响应内容的字符串形式,即,url对应的页面内容 |
r.encoding | 从HTTP header中猜测的响应内容编码方式,如果header中不存在charset,则认为编码方式为ISO-8859-1 |
r.apparent_encoding | 从内容中分析出的响应内容编码方式(备选编码方式)这种方法比较慢 |
r.content | HTTP响应内容的二进制形式 |
异常名称 | 解释 |
---|---|
requests.ConnectionError | 网络连接错误异常,如DNS查询失败,拒绝连接等 |
requests.HTTPError | HTTP错误异常 |
requests.URLRequired | URL缺失异常 |
requests.TooManyRedirects | 超过最大重定向次数,产生重定向异常 |
requests.ConnectTimeout | 连接远程服务器超时异常 |
requests.Timeout | 请求URL超时,产生超时异常 |
r.raise_for_status() | 如果r.status_code不是200,会引发异常requests.HTTPError |
方法 | 解释 |
---|---|
requests.request() | 构造一个请求,支撑以下各方法的基础方法 |
requests.get() | 获取HTML网页的主要方法,对应于HTTP的GET |
requests.head() | 获取HTML网页头信息的方法,对应于HTTP的HEAD |
requests.post() | 向HTML网页提交POST请求的方法,对应于HTTP的POST |
requests.put() | 向HTML网页提交PUT请求的方法,对应于HTTP的PUT |
requests.patch() | 向HTML网页提交局部修改求求,对应于HTTP的PATCH |
requests.delete() | 向HTML页面提交删除请求,对应于HTTP的DELETE |
操作 | 解释 |
---|---|
GET | 请求获取URL位置的资源 |
HEAD | 请求获取URL位置资源的响应消息报告,即获得该资源的头部信息 |
POST | 请求向URL位置的资源后附加新的数据 |
PUT | 请求向URL位置存储一个资源,覆盖原URL位置的资源 |
PATCH | 请求局部更新URL位置的资源,即改变该处资源的部分内容 |
DELETE | 请求删除URL位置存储的资源 |
·· / ·– ·· ·-·· ·-·· / ·–· · ·-· ··· ·· ··· - / ··- -· - ·· ·-·· / ·· / ·– ·· -·
果然Python和C/C++系的语法差别很大。。在学了C/C++之后再学Python,有种当初从Pascal转C++的既视感,相比之下C/C++转Java感觉就简单多了。
这里记录一下学习Python的笔记,其中标注了部分Python与C/C++明显差别的用法。
其中大部分Python语法解释来源于Python语言程序设计
·· / ·– ·· ·-·· ·-·· / ·–· · ·-· ··· ·· ··· - / ··- -· - ·· ·-·· / ·· / ·– ·· -·
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2844
这题可以转化为多重背包问题,套用二进制优化即可,可以参考《背包九讲》。
·· / ·– ·· ·-·· ·-·· / ·–· · ·-· ··· ·· ··· - / ··- -· - ·· ·-·· / ·· / ·– ·· -·
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1207
这题一开始考虑过用时间和坐标作为状态来着,不过没有必要,直接用地鼠的序号做状态就行了,状态转移时判断一下坐标距离是否满足条件即可。
·· / ·– ·· ·-·· ·-·· / ·–· · ·-· ··· ·· ··· - / ··- -· - ·· ·-·· / ·· / ·– ·· -·
题目链接:https://hihocoder.com/problemset/problem/1139
二分索敌值,用BFS遍历,判断能不能在规定步数内走到终点即可。注意不能用DFS(可能是因为路径非最短)。
·· / ·– ·· ·-·· ·-·· / ·–· · ·-· ··· ·· ··· - / ··- -· - ·· ·-·· / ·· / ·– ·· -·
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1391
根据仔细分析题意后可以找出n和坐标x, y有如下关系:
n%4 | x | y |
---|---|---|
0 | n/2 | n/2 |
1 | n/2+1 | n/2+1 |
2 | n/2+1 | n/2-1 |
3 | n/2+2 | n/2 |
枚举n求出对应的x, y并用二维的map建立索引就可以了。
·· / ·– ·· ·-·· ·-·· / ·–· · ·-· ··· ·· ··· - / ··- -· - ·· ·-·· / ·· / ·– ·· -·
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1285
题目给定战胜关系,求每队的排名,看起来与POJ3660很像,但前者是求出每队的排名(可能不唯一),后者是判断每一队的排名是否唯一。
这题可以用拓扑排序做,但要特别注意输出的次序是从小到大的,这里把拓扑排序的队列修改为优先队列,就能按顺序输出了。