自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

yofer张耀琦的专栏

数学之法,世界之道

  • 博客(194)
  • 资源 (1)
  • 收藏
  • 关注

原创 埃及分数问题 - 迭代加深搜索经典问题

在古埃及,人们使用单位分数的和(即1/a, a是自然数)表示一切有理数。例如2/3 = 1/2 + 1/6,但不允许2/3 = 1/3 + 1/3,因为在加数中不允许有相同的。对于一个分数a/b,表示方法有很多种,其中加数少的比加数多的好,如果加数个数相同,则最小的分数越大越好。例如,19/45 = 1/5 + 1/6 + 1/18是最优方案。输入整数a,b(0 < a < b < 500),试编程计算最佳表达式。理论上可以用回溯法求解,但是如果用宽度优先遍历,连一层都拓展不完(因为每一层都是无限大

2015-06-30 19:49:57 828

原创 UVa - 10603 - Fill

BFS即可,不过需要注意要求不是步数最少,而是需要水量最少。所以拓展的时候需要取出水量最少的结点进行拓展。用优先队列即可。#include #include #include #include #include #include #include #include #include #include #include #include #include #includ

2015-06-30 12:03:06 681

原创 Python学习笔记 - map reduce

#!/usr/bin/env python3# -*- coding: utf-8 -*-def f(x): return x * xr = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])# 结果r是一个Itertator,是惰性序列# 通过list()函数让它把整个序列都计算出来并返回一个listprint(list(r))# [1, 4, 9, 16

2015-06-30 00:53:05 1676 2

转载 Python学习笔记 - 高阶函数

高阶函数英文叫Higher-order function。什么是高阶函数?我们以实际代码为例子,一步一步深入概念。变量可以指向函数以Python内置的求绝对值的函数abs()为例,调用该函数用以下代码:>>> abs(-10)10但是,如果只写abs呢?>>> absin function abs>可见,abs(-10)是函数调用,而abs是函数本身

2015-06-30 00:09:02 1064

转载 Python学习笔记 - 迭代器Iterator

我们已经知道,可以直接作用于for循环的数据类型有以下几种:一类是集合数据类型,如list、tuple、dict、set、str等;一类是generator,包括生成器和带yield的generator function。这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。可以使用isinstance()判断一个对象是否是Iterable对象:

2015-06-29 22:34:05 2977

原创 Python学习笔记 - 生成器generator

#!/usr/bin/env python3# -*- coding: utf-8 -*-# generator 生成器L = [x * x for x in range(10)]print(L)# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]g = (x * x for x in range(10))print(g)# at 0x00000000

2015-06-29 22:24:06 1823 3

原创 Python学习笔记 - 列表生成式listComprehensions

#!/usr/bin/env python3# -*- coding: utf-8 -*-list(range(1, 11))# 生成1乘1,2乘2...10乘10L = []for x in range(1, 11): L.append(x * x)# 上面太麻烦,看下面[x * x for x in range(1, 11)]# [1, 4, 9, 16, 25, 36

2015-06-29 21:45:12 926

原创 Python学习笔记 - 迭代Iteration

任何可迭代对象都可以作用于for循环,包括我们自定义的数据类型,只要符合迭代条件,就可以使用for循环。

2015-06-29 21:22:13 781

原创 Python学习笔记 - 切片

#!/usr/bin/env python3# -*- coding: utf-8 -*-def fact(n): if n == 1: return 1 return n * fact(n - 1)def fact(n): return factIter(n, 1)def factIter(num, product): if num == 1: return pro

2015-06-29 20:50:31 661

原创 Python学习笔记 - 函数参数

Python的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数。默认参数一定要用不可变对象,如果是可变对象,程序运行时会有逻辑错误!要注意定义可变参数和关键字参数的语法:*args是可变参数,args接受的是一个tuple:**kw是关键字参数,kw接收的是一个dict。以及调用函数时如何传入可变参数和关键字参数的语法:可变参数既可以直接传入:func(1, 2, 3), 又可以先组装list或tuple,再通过*args传入:func(*(1, 2, 3));关键字

2015-06-29 15:33:01 838

原创 UVa - 11175 - From D to E and Back

Take any directed graph D with n vertices and m edges. You can make the Lying graph E of D in the following way. E will have mvertices, one for each edge of D. For example, if D has an edge uv, then

2015-06-29 15:02:28 775

原创 Python学习笔记 - function调用和定义

#其实上面只是一种假象,Python函数返回的仍然是单一值>>> r = move(100, 100, 60, math.pi / 6)>>> print(r)(151.96152422706632, 70.0)#实际上返回的是一个tuple!#但是,语法上,返回一个tuple可以省略括号,#而多个变量可以同时接受一个tuple,按位置赋给对应的值#所以,Python的函数返回多值实际就是返回一个tuple#但是写起来更方便#函数执行完毕也没有return语句时,自动return Non

2015-06-28 20:54:12 2647

原创 Python学习笔记 - dict和set

dict内部存放的顺序和key放入的顺序是没有关系的和list相比较,dict有以下几个特点:1.查找和插入的速度极快,不会顺着key的增加而增加2.需要占用大量的内存,内存浪费多而list相反:1.查找和插入的时间随着元素的增加而增加;2.占用空间小,浪费内存很少。所以,dict是用空间来换取时间的一种方法。dict可以用在需要高速查找的很多地方。需要牢记的第一条就是dict的key必须是不可变对象。这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得

2015-06-28 20:05:19 647

原创 Python学习笔记 - ifelifelse-forin-while

if elif else#!/usr/bin/env python3# -*- coding: utf-8 -*-age = 20if age >= 18: print('your age is', age) print('adult')age = 3if age >= 18: print('your age is', age) print('adult')else:

2015-06-28 19:23:24 793

原创 Python学习笔记 - list和tuple

tuple不可变,因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。tuple的陷阱:当定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来,eg

2015-06-28 17:30:03 808

原创 UVa - 10366 - Faucet Flow

考虑细节比较多,直接上代码,WA了三次,好伤,最近几天做题有些慢。AC代码:#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #inclu

2015-06-28 17:00:55 687

原创 UVa - 1623 - Enter The Dragon

贪心,用数组记录每个湖上次满水的日子,用集合记录不下雨的日子。下雨的时候,查找当前湖最后灌满的日子之后有没有不下雨的日子,龙在最近的一天喝光湖里的水。刚开始本来想一边读取一边处理的,但是函数跳转的时候流操作对一个数读取了两次,导致直接出错了,最后就先把输入存下来了。

2015-06-28 11:24:46 1135

原创 UVa - 1622 - Robot

贪心,先保证cw >= ce,cn >= cs,并且先执行东西来回移动比南北更好。然后执行东西来回移动,接着对比每次向西移动和南北移动哪个比较好。知道仅剩西和北两个方向,则结束。

2015-06-28 10:07:01 1268 1

原创 Coco2dx制作一个3D旋转的效果

建了工程之后修改HelloWorldScene.cpp文件,修改部分为// on "init" you need to initialize your instancebool HelloWorld::init(){ ////////////////////////////// // 1. super init first if ( !Layer::init() )

2015-06-28 00:55:41 1935

原创 Python学习笔记 - 字符串和编码

#!/usr/bin/env python3# -*- coding: utf-8 -*-#第一行注释是为了告诉Linux/OS X系统,#这是一个Python可执行程序,Windows系统会忽略这个注释;#第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,#否则,你在源代码中写的中文输出可能会有乱码。'''>>> ord('A')65>>> ord('中'

2015-06-28 00:16:14 586

转载 Sublime Text [Decode error - output not utf-8]

问题:Sublime Text 在build Python时,如果python源代码里有中文,例如“print(‘中文’)”,Sublime Text 会报[Decode error - output not utf-8]分析:在Sublime Text里,新建一个python源码文件,内容为:import sysprint(sys.stdin.encoding)p

2015-06-27 23:21:50 1029

转载 字符编码

字符编码我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的

2015-06-27 23:05:15 638

原创 UVa - 1312 - Cricket Field

按横坐标排序,然后枚举两个点,判断能构成的最大正方形。然后纵坐标再来一次。注意初始化的时候可以给四个顶点也放上树,方便处理边界。

2015-06-27 11:09:49 1050

原创 Python学习笔记 - 数据类型和变量

Python中有整数和浮点数,表示方法和C语言一样浮点数也很像,不过Python可以用单引号把字符串括起来字符串是以单引号'或双引号"括起来的任意文本,比如'abc',"xyz"等等。请注意,''或""本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有a,b,c这3个字符。如果'本身也是一个字符,那就可以用""括起来,比如"I'm OK"包含的字符是I,',m,空格,O,

2015-06-26 23:51:07 875

原创 Python学习 - 输入和输出

#输出print('hello, python')print('The quick brown fox', 'jumps over', 'the lazy dog')#多个字符串,用逗号隔开,就可以连成一串输出#print()会依次打印每个字符串,遇到逗号会输出一个空格print(300) # 300print(100 + 200) # 300print('100 + 200

2015-06-26 23:23:45 724

原创 Python代码运行助手

将下述demo文件保存下来,比如存为learning.py 然后运行,如果出现:Ready for Python code on port 39093...则说明成功了。demo#!/usr/bin/env python3# -*- coding: utf-8 -*-r'''learning.pyA Python 3 tutorial from http://www

2015-06-26 22:54:50 11195 1

原创 UVa - 1619 - Feel Good

枚举每个值当作区间最小值时求出最大区间,然后枚举每种情况求出最大值。

2015-06-26 18:06:39 861

原创 Uva - 11536 - Smallest Sub-Array

类似滑动窗口,不过窗口的最大长度需要依靠其中是否包含1~k来判定,右端点从左到右移动,用vis[i]数组记录i在窗口中出现的次数,如果vis[i] == 1,则说明第一次出现,cnt 就增加1。当cnt 和 k 相等的时候,记录下此时的长度,然后左端点向右移动,如果左边出窗口的值原本刚好只有1个时,就要cnt减小1了。

2015-06-26 15:40:56 950

原创 UVa - 1618 - Weak Key

要求找到4个整数Np、Nq、Nr、Ns(1<= p < q < r < s <= k)s.t. Nq > Ns > Np > Nr or Nq < Ns < Np < Nr。先看第一种情况,下标第二大的,值最大,而下标第三大的,值最小,下标最小和最大的都插在了中间,确定这个要求后,先想到dfs求解,但是考虑到5000这个数量比较大,怕函数进出栈太慢。直接枚举四个值时间复杂度又太高了,所以只枚举两个,枚举Ns和Np,然后记录找到Nq和Nr。用了两个标记数组, l[i][j] 表示下标小于j且值比Ni大的

2015-06-26 14:30:09 1668

原创 UVa - 1617 - Laptop

还是贪心法。把原始数据排序,排序的规则是先按照右端点排序,右端点相同的情况下,再按照左端点排序。然后最左边开始遍历线段,取第一个线段的右端点,判断是否和第二个线段的右端点相等,如果相等,肯定可以缩短为两个相邻的;如果不想等,再判断第一个右端点是否小于第二个左端点,如果小于,则中间肯定有空隙,标记加1,然后在拿第二个的右端点和第三个线段继续同理比较;如果大于,则说明第二个的可以紧邻放在第一个的最右边,相当于把第一个线段放大,这里就是贪心的思想了。

2015-06-26 10:11:42 1437

原创 UVa - 1616 - Caravan Robbers

二分找到最大长度,最后输出的时候转化成分数,比较有技巧性。AC代码:#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include

2015-06-25 20:16:16 1085

原创 UVa - 140 - Bandwidth

直接枚举全排列,计算带宽,记录最小的情况,如果有一样的,取字典序小的就可以了。生成排列的时候用了STL函数next_permutation。

2015-06-25 18:37:09 575

原创 UVa - 129 - Krypton Factor

基本思路就是一个字母一个字母的生成,只是每次生成一个需要判定是否满足要求。一种想法就是每增加一个,就判断左右的偶数长度的子串是否满足要求,这样做了很多重复工作。所以每次判定的时候只需要判断后缀偶数长度的子串是否满足要求,然后回溯求解即可。

2015-06-25 14:43:40 704

原创 UVa - 524 - Prime Ring Problem

回溯法直接搞定,注意判断素数的时候为了提高效率,直接查到小于50的素数手工打表了。。。这个方法在校赛的时候也曾经用过,当时因为超时,直接找了前2000个素数打表。。。注意:如果最坏情况下的枚举量很大,应该使用回溯法而不是生成-测试法。

2015-06-25 12:36:46 960 2

原创 30000以内质数表

30000以内质数表,有时候做题打表用

2015-06-25 11:27:08 4380

原创 八皇后问题

介绍了八皇后问题的回溯法,并进行了效率优化

2015-06-25 10:16:22 757

转载 如何在Git中撤销一切 | 干货

翻译:李伟 审校:张帆译自:GithubJF杰微刊:如何在Git中撤销一切任何一个版本控制系统中,最有用的特性之一莫过于 “撤销(undo)”操作。在Git中,“撤销”有很多种含义。当你完成了一次新的提交(commit),Git会及时存储当前时刻仓库(repository)的快照(snapshot);你能够使用Git将项目回退

2015-06-25 10:13:47 1010

原创 UVa - 10570 - Meeting with Aliens

对于n个数字,调整成从大到小或者从小到大,操作数都不超过n,每一次操作至少有一个数字放到正确的位置。枚举起点还有序列正反,求出最小的交换次数。求交换次数的时候用贪心思想,先把1交换到1,再把2交换到2。。。

2015-06-25 00:28:36 1623

原创 UVa - 1153 - Keep the Customer Satisfied

用pair作为基本结构保存q和d,在用一个数组vector<pair<int, int> >来存储输入数据。然后按照等待时间 d 排序,注意用sort排序默认是用first,这里的的first是q,所以要重写一个比较函数,用second排序。接下来就是贪心算法,用优先队列priority_queue<pair<int, int> > 存储结果,这里体现了用pair的优点,刚好优先队列中就是first高优先级高。一个个入队,如果总时间超过了当前限制时间,则把队中花费时间最长的元素(就是q最大的)删掉。

2015-06-24 23:14:42 729

原创 Uva - 1615 - Highway

先求出每个点个x轴的交点,注意交点可能超出去,超出去的就取边界点。每个点和x轴的交点构成一个区间,从最左边区间的右端点pos开始向左遍历,如果下一个区间包含了pos,则它们公用一个点,如果pos在下一个区间的外面,则出现了区间不相交的情况,点数就要增加了,此时再把pos设置为这个区间的右断点继续遍历。

2015-06-24 22:06:13 777

GDB命令行备忘录

对gdb常用的命令进行了整理,基本上都可以找到相应的说明

2015-08-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除