【hihocoder】hiho密碼(水題)

一、問題描述

時間限制:10000ms
單點時限:1000ms
內存限制:256MB

描述

小Ho根據最近在密碼學課上學習到的知識,開發出了一款hiho密碼,這款密碼的祕鑰是這樣生成的:對於一種有N個字母的語言,選擇一個長度爲M的單詞;將組成這個單詞的所有字母按照順序不重複的寫出(即遇到相同字母時跳過);然後將字母表剩下的沒有使用過的字母按照順序在其後進行排列。

如對於有5個字母的hiho語,選擇單詞1, 2, 2, 4, 3(此處數字表示字母在字母表中的順序),則祕鑰爲1,2,4,3,5。

但是有一天小Ho在計算出了祕鑰之後,卻發現他弄丟了一開始選擇的單詞,於是他找到了你,希望你能夠幫他找到能夠生成這個祕鑰的最短的單詞。

輸入

每個輸入文件包含單組測試數據。

每組測試數據的第一行爲一個正整數N,意義如前文所述。

每組測試數據的第二行爲N個正整數,用來描述一個祕鑰,其中第i個正整數Ai表示祕鑰的第i個字符在字母表中的順序。

對於100%的數據,滿足N<=1000,1<=Ai<=N。

對於100%的數據,滿足對於任意1<=i, j<=N,若i≠j,則Ai≠Aj

輸出

對於每組測試數據,輸出能夠生成輸入給出的祕鑰的最短的單詞(空串不認爲是單詞)。由於字母表沒有給出,所以對於每個字母,輸出其在字母表中的順序即可(用空格隔開)。

樣例輸入
5
1 2 4 3 5
樣例輸出
1 2 4
注意特判一下全部遞增序的情況
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<iostream>
using namespace std;
const int N = 1005;
int a[N];
int main() {
	int n,flag;
	while(scanf("%d",&n)!=EOF) {
		for(int i=1; i<=n; i++) {
			scanf("%d",&a[i]);
		}
		flag=0;
		for(int i=n; i>1; i--) {
			if(a[i]>a[i-1]) {
				flag++;
			} else
				break;
		}
		if(flag==n-1) {
			printf("%d\n",a[1]);
			continue;
		}
		for(int i=1; i<=n-flag-1; i++) {
			if(i==1)
				printf("%d",a[i]);
			else
				printf(" %d",a[i]);
		}
		printf("\n");
	}
	return 0;
}







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章