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
37
38
39
40
41
42
43
44
45
46
47class nx:
count = 0
def __init__(self):
self.str_list=[]
self.N = int(raw_input().strip())
for _ in xrange(self.N):
self.str_list.append(raw_input().strip())
print self.count_inversion(self.str_list)
def merge(self, ListA, ListB):
self.newlist = []
while ListA and ListB:
if ListA[0] > ListB[0]:
self.newlist.append(ListB[0])
ListB = ListB[1:]
self.count += len(ListA)
print str(len(ListA))+"**** "
else:
self.newlist.append(ListA[0])
ListA =ListA[1:]
if ListA:
self.newlist = self.newlist + ListA
elif ListB:
self.newlist = self.newlist + ListB
return self.newlist
def merge_sort(self, A):
if len(A) == 1:
return A
else:
self.middle = len(A)/2
print "**************"
print "Ais "+str(A)
print "middle is "+ str(self.middle)
print "zuo"
print A[:self.middle]
print "you"
print A[self.middle:]
self.sa1 = self.merge_sort(A[:self.middle])
self.sa2 = self.merge_sort(A[self.middle:])
return self.merge(self.sa1, self.sa2)
def count_inversion(self, sequence):
self.merge_sort(sequence)
return self.count
if __name__ == "__main__":
nx()
结果:
Ais ["2’, "4’, "3’, "1’]
middle is 2
zuo
["2’, "4’]
you
["3’, "1’]
Ais ["2’, "4’]
middle is 1
zuo
["2’]
you
["4’]
1
2
3
4
5
6
7
8****************为什么会这样
Ais ["4", "3", "1"]
middle is 1
zuo
["4"]
you
["3", "1"]
****************
Ais ["3’, "1’]
middle is 1
zuo
["3’]
you
["1’]
我知道了,python局部变量问题
class nx:
def init(self):
self.count = 0
self.str_list=[]
self.N = int(raw_input().strip())
for _ in xrange(self.N):
self.str_list.append(raw_input().strip())
print self.count_inversion(self.str_list)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18def merge(self, ListA, ListB):
newlist = []
while ListA and ListB:
if int(ListA[0]) > int(ListB[0]):
self.count += len(ListA)
newlist.append(ListB.pop(0))
else:
newlist.append(ListA.pop(0))
return newlist + ListA + ListB
def merge_sort(self, A):
if len(A) == 1: return A
else:
middle = len(A)/2
return self.merge(self.merge_sort(A[:middle]), self.merge_sort(A[middle:]))
def count_inversion(self, sequence):
self.merge_sort(sequence)
return self.count
if name == "main":
nx()
就是个边界条件的问题,不等号加上或者去掉等号