Problem A: Minimum Non-Conflicting Value Sequence
Given a sequence of intgeers, find the smallest positive integer that can be added to make all elements distinct while maintaining increasing order.
#include<iostream>
#include<vector>
using namespace std;
int find_min_increment(vector<int>& nums) {
int current = 1;
for(int num : nums) {
if(current == num) current++;
current++;
}
return current - 1;
}
int main() {
int test_cases;
cin >> test_cases;
while(test_cases--) {
int n;
cin >> n;
vector<int> arr(n);
for(int i = 0; i < n; i++) cin >> arr[i];
cout << find_min_increment(arr) << endl;
}
return 0;
}
Problem B: Maximum Unique Set Union
Given multiple sets of integers, determine the maximum number of unique elements obtainable by excluding atleast one set from the collection.
#include<iostream>
#include<vector>
#include<unordered_set>
using namespace std;
int max_unique_elements(vector<vector<int>>& sets) {
int max_count = 0;
for(int exclude = 0; exclude < sets.size(); exclude++) {
unordered_set<int> combined;
for(int i = 0; i < sets.size(); i++) {
if(i == exclude) continue;
for(int num : sets[i]) {
combined.insert(num);
}
}
max_count = max(max_count, (int)combined.size());
}
return max_count;
}
int main() {
int test_cases;
cin >> test_cases;
while(test_cases--) {
int n;
cin >> n;
vector<vector<int>> sets(n);
for(int i = 0; i < n; i++) {
int size;
cin >> size;
sets[i].resize(size);
for(int j = 0; j < size; j++) {
cin >> sets[i][j];
}
}
cout << max_unique_elements(sets) << endl;
}
return 0;
}