Source Code
Problem: 1989 | User: henry11 | |
Memory: 360K | Time: 94MS | |
Language: G++ | Result: Accepted |
- Source Code
/* 如果存在其有包括全排序的一個最小組合,(1,2,...n),(次序不限,只要有1...n的數字就行了,也有可能有重复數字) 找到其所有這樣組合。可合成()()()...()[],( 設有k個括號,[]里的元素可能為空) 則其最短的非子序長度為k+1; 原因: 長度度k的子序,都可由前k個括號里抽出一個數組成。 但由于k+1,就找不到一個組合,因為最后一個組合里少了需要的最后一個數。 */ #include<stdio.h> #include<string.h> //#include<stdlib.h> int main() { int n, k, flag = 0, i, t, ans = 0; int len = 0, breed[10005]; memset(breed, 0, sizeof(breed)); scanf("%d%d", &n, &k); for(i=1; i<=n; i++) { scanf("%d", &t); if(breed[t] == flag) { len += 1; breed[t] = flag+1; } if(len == k) { flag++; ans++; len = 0; } } printf("%d/n", ans+1); //system("pause"); return 1; }
這個題告訴我,代碼需要很大努力地優化。