# 題目: UVa 11572 - Unique Snowflakes
# 題目說明
Emily 有一個很酷的想法:包裝雪花並販售
她設計了一個自動包裝雪花的機器
但是,她想讓每一個雪花包裝都不同
寫一個程式找出最大雪花包裝的大小
INPUT:
第一行為一個整數 n
,代表有 n
筆資料
每筆資料第一行為一個整數 k
,代表有 k
片雪花
接下來有 k
行,每行有一個整數,代表雪花的編號
OUTPUT:
每筆資料輸出最多能裝幾片雪花
# 解題方法
求一個陣列中最長的不重複子陣列
如果遇到重複的雪花,則記錄長度並刪除最前項
# 參考程式碼
#include <iostream> | |
#include <unordered_set> | |
#include <vector> | |
using namespace std; | |
int main() | |
{ | |
ios_base::sync_with_stdio(false); | |
cin.tie(nullptr); | |
cout.tie(nullptr); | |
int n, k, temp; | |
size_t total; | |
unordered_set<int> snowflake; | |
vector<int> cpy; | |
cin >> n; | |
while (n--) { | |
total = 0; | |
cin >> k; | |
while (k--) { | |
cin >> temp; | |
if (snowflake.count(temp)) total = max(total, snowflake.size()); | |
while (snowflake.count(temp)) snowflake.erase(*cpy.begin()), cpy.erase(cpy.begin()); | |
cpy.emplace_back(temp); | |
snowflake.emplace(temp); | |
} | |
total = max(total, snowflake.size()); | |
cout << total << "\n"; | |
snowflake.clear(); | |
cpy.clear(); | |
} | |
return 0; | |
} |
# 參考資料
https://www.larrysprognotes.com/UVa%20-%2011572/