看了下校内网发现距离微调过了,于是开始划线。。

long_run.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#coding=utf-8
ifo = { 1:'体活', 2:'副馆', 3:'二教', 4:'九教' }
data = { '12':580,'23':650,'34':400,'14':380 }
result = dict()
aim = 2000 # m:2000 f:1500
def sort(s):
return ''.join((lambda x:(x.sort(),x)[1])(list(s)))
def show():
rec('',0)
keys = sorted(result, key=lambda k:result[k])
for k in keys:
print result[k], k
def rec(path, dis):
if dis >= aim:
result[path[:-2]] = dis
return
if path == '':
for i in '1234':
rec(i, 0)
else:
if len(path) > 2:
dis_key = sort(path[-3]+path[-1])
dis = dis + data[sort(dis_key)]
if path[-1] in '13':
rec(path+'-2', dis)
rec(path+'-4', dis)
else:
rec(path+'-1', dis)
rec(path+'-3', dis)
if __name__ == '__main__':
show()

本来思路是用图的,感觉太麻烦换成树也行,但是突然发现自己已经差不多完全忘记数据结构了。后来回寝室翻翻书,最后还是用无脑递归,两节课没听就在搞这个东西。(汗)

result:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2000 3-4-3-4-3-4
2000 4-3-4-3-4-3
2010 1-2-3-4-1
2010 1-4-3-2-1
2010 3-4-1-2-3
2010 2-3-4-1-2
2010 4-1-2-3-4
2010 4-3-2-1-4
2010 2-1-4-3-2
2010 3-2-1-4-3
2030 3-4-3-2-1
2030 1-2-3-4-3
2080 3-2-3-4-1
2080 1-4-3-2-3
2100 4-3-2-3-4
2100 1-4-1-4-1-2
2100 3-4-3-2-3
2100 2-1-4-1-4-1
2100 3-2-3-4-3
...

2000m…恕我眼拙注意有个整数400……平时跑的那条路变成1800+m不再考虑,等于原来二九要跑4趟的,现在变成5趟了,跑5趟也太蠢了吧,一个点要刷3次卡?万一排队怎么办?

所有的2010m结果其实是一样的,8种不同的姿势跑一周而已。

另外从去年的经验看,请尽量避免二教这个点,排队人数极其容易50+,导致速度不够从而…

另附女生的新路线

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1520 1-4-1-4-1
1520 4-1-4-1-4
1540 1-2-1-4
1540 4-1-2-1
1540 3-4-1-4-1
1540 1-4-1-4-3
1560 3-4-1-4-3
1560 4-1-4-3-4
1560 1-4-3-4-1
1560 4-3-4-1-4
1580 3-4-3-4-1
1580 1-4-3-4-3
1600 3-4-3-4-3
1600 4-3-4-3-4
1610 4-1-2-3
1610 3-2-1-4
1630 4-3-2-1
1630 1-2-3-4
...

最短路线居然他喵的没变