# 題目: 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/