劃分的區塊數=四邊的交點數+中間的交點數-和四邊重疊的邊的邊數
import sys
defcount_lands
(long
,wide,line_num:
'len(position_list)-1'
,line_table)
: sideways=
0 dots=
0for i in
range(1
,line_num+1)
: line1_start=line_table[i][0
] line1_end=line_table[i][1
]if line1_start[1]
>line1_end[1]
:# 總是從高指向低
line1_start,line1_end=line1_end,line1_start
for j in
range
(i+2
,line_num+1)
: line2_start=line_table[j][0
] line2_end=line_table[j][1
]if line2_start[1]
>line2_end[1]
:# 總是從高指向低
line2_start,line2_end=line2_end,line2_start
# 不共邊的情況(必然無交點)if(
(line1_end[1]
+line2_end[1]
)>wide and
(line1_start[0]
+line2_start[0]
)>
long)or
((line1_start[0]
+line1_start[1]
+line2_start[0]
+line2_start[1]
<
long
+wide)
and(line1_end[0]
+line1_end[1]
+line2_end[0]
+line2_end[1]
>
long
+wide)):
pass
# 共兩邊
elif
(line1_start[1]
-line2_start[1]
==0and line1_end[0]
-line2_end[0]
==0)or
(line1_start[0]
-line2_start[0]
==0and line1_end[1]
-line2_end[1]
==0):
if(line1_start[0]
-line2_start[0]
)*(line1_end[1]
-line2_end[1]
)<0or
(line1_start[1]
-line2_start[1]
)*(line1_end[0]
-line2_end[0]
)<0:
dots+=
1# 共一邊
else
:if line1_start[1]
==line2_start[1]
:if line1_end[0]
==0: left_dot,right_dot=line1_start,line2_start
else
: left_dot,right_dot=line2_start,line1_start
if left_dot[0]
>right_dot[0]
: dots+=
1continue
elif line1_end[1]
==line2_end[1]
:if line1_start[0]
==0: left_dot,right_dot=line1_end,line2_end
else
: left_dot,right_dot=line2_end,line1_end
if left_dot[0]
>right_dot[0]
: dots+=
1continue
else
: end_y=
min(line1_end[1]
,line2_end[1]
) start_y=
max(line1_start[1]
,line2_start[1]
)if end_y>start_y:
dots+=
1continue
# 若該邊與矩形四邊重疊:
if(line1_start[0]
==line1_end[0]
and(line1_start[0]
==0or line1_start[0]
==long))
or(line1_start[1]
==line1_end[1]
and(line1_start[1]
==0or line1_start[1]
==wide)):
sideways+=
1return line_num+
1+dots-sideways
line_in_case=
0while
true
: read_in=sys.stdin.readline()if
not read_in:
break
if line_in_case==0:
long
,wide=
tuple([
int(x)
for x in read_in.rstrip(
).split(
' ')])
line_in_case+=1if
long==0
and wide==0:
# 檔案結束標誌
break
elif line_in_case==1:
line_num=
int(read_in.rstrip())
# 線段數
position_list=
# 保持座標的列表
line_in_case+=
1else:[
int(x)
for x in read_in.rstrip(
).split(
' ')])
line_num-=
1if line_num==-1
:# 座標點數量比線段數多一
line_in_case=
0# 開始處理程式
line_table=
# 儲存線段資訊的字典
lands=count_lands(
long
,wide,
len(position_list)-1
,line_table)
print
(lands)
Python 用pyinstrument做效能分析
在計算密集型計算或一些web應用中,我們常常需要對 做效能分析。在python中,最原始的方法即是使用time包中的time函式 該函式以秒為計時單位 from time import sleep,time def func1 sleep 0.001 def func2 sleep 2 begin1...
用Python做科學計算
python是一種物件導向的 動態的程式語言,具有非常簡潔而清晰的語法,既可以用於快速開發程式指令碼,也可以用於開發大規模的軟體,特別適合於完成各種高層任務。隨著numpy,scipy,matplotlib,enthought librarys等眾多程式庫的開發,python越來越適合於做科學計算。...
用python做詞頻統計
假設有乙個本地的txt檔案,想對其進行詞頻統計,可以這樣寫 import time path c users zhangxiaomei desktop walden.txt with open path,r as text words text.read split print words forw...