1083 是否存在相等的差 (20分)
給定 n 張卡片,正面分別寫上 1、2、……、n,然後全部翻面,洗牌,在背面分別寫上 1、2、……、n。將每張牌的正反兩面數字相減(大減小),得到 n 個非負差值,其中是否存在相等的差?
輸入格式:
輸入第一行給出乙個正整數 n(2 ≤ n ≤ 10 000),隨後一行給出 1 到 n 的乙個洗牌後的排列,第 i 個數表示正面寫了 i 的那張卡片背面的數字。
輸出格式:
按照「差值 重複次數」的格式從大到小輸出重複的差值及其重複的次數,每行輸出乙個結果。
輸入樣例:
83 5 8 6 2 1 4 7
輸出樣例:
5 23 3
2 2ac
分析:這題核心就是統計差值相同的個數,裡用字典很方便。輸出時注意過濾掉次數僅為1的情況即可。
n =
int(
input()
)nums =
input()
.split(
)minus =
dict()
for i, num in
enumerate
(nums)
: temp =
int(num)
-(i+1)
ifint
(num)
>=
(i+1
)else
(i+1)-
int(num)
# 大減小
minus[temp]
= minus.get(temp,0)
+1results =
sorted
(minus.items(
), key=
lambda d:d, reverse=
true
)for result in results:
if result[1]
!=1:# 僅有乙個,說明沒有與之相等的,過濾掉~
print
(result[0]
, result[1]
)
1083 是否存在相等的差
給定 n 張卡片,正面分別寫上 1 2 n,然後全部翻面,洗牌,在背面分別寫上 1 2 n。將每張牌的正反兩面數字相減 大減小 得到 n 個非負差值,其中是否存在相等的差?輸入第一行給出乙個正整數 n 2 n 10 000 隨後一行給出 1 到 n 的乙個洗牌後的排列,第 i 個數表示正面寫了 i ...
1083 是否存在相等的差
1083 是否存在相等的差 20 分 給定 n 張卡片,正面分別寫上 1 2 n,然後全部翻面,洗牌,在背面分別寫上 1 2 n。將每張牌的正反兩面數字相減 大減小 得到 n 個非負差值,其中是否存在相等的差?輸入第一行給出乙個正整數 n 2 n 10 000 隨後一行給出 1 到 n 的乙個洗牌後...
1083 是否存在相等的差
1083 是否存在相等的差 20 分 給定 n 張卡片,正面分別寫上 1 2 n,然後全部翻面,洗牌,在背面分別寫上 1 2 n。將每張牌的正反兩面數字相減 大減小 得到 n 個非負差值,其中是否存在相等的差?輸入第一行給出乙個正整數 n 2 n 10 000 隨後一行給出 1 到 n 的乙個洗牌後...