1. 程式人生 > 其它 >【簡便解法】1083 是否存在相等的差 (20分)_14行程式碼AC

【簡便解法】1083 是否存在相等的差 (20分)_14行程式碼AC

技術標籤:PAT乙級PATPAT乙級

立志用更少的程式碼做更高效的表達


PAT乙級最優題解——>傳送門


給定 N 張卡片,正面分別寫上 1、2、……、N,然後全部翻面,洗牌,在背面分別寫上 1、2、……、N。將每張牌的正反兩面數字相減(大減小),得到 N 個非負差值,其中是否存在相等的差?

輸入格式:
輸入第一行給出一個正整數 N(2 ≤ N ≤ 10 000),隨後一行給出 1 到 N 的一個洗牌後的排列,第 i 個數表示正面寫了 i 的那張卡片背面的數字。

輸出格式:
按照“差值 重複次數”的格式從大到小輸出重複的差值及其重複的次數,每行輸出一個結果。

輸入樣例:
8

3 5 8 6 2 1 4 7
輸出樣例:
5 2
3 3
2 2


注意,題中問是否存在相等的差, 也就是說,某差值出現了兩次以上,才能被輸出。


#include<bits/stdc++.h>
using namespace std;
int a[10010] = {0};
int main() {
	int n; cin >> n; 
	for(int i = 1; i <= n; i++){
		int x; cin >> x; 
		a[abs(x-i)]++;
	}
	bool flag = false;
	for(int i = 10005; i >=
0; i--) { if(a[i] > 1) cout << i << ' ' << a[i] << '\n'; } return 0; }

耗時

在這裡插入圖片描述


每日一句

他日若遂凌雲志,敢笑黃巢不丈夫。