一开始看到这题,我误以为是今年美团春招的原题,想着随手A过去的。喵的,眼辖脑残,卡了一个晚上。后来经大佬提醒,子序列要连续才恍然大悟啊。接下来就是暴力枚举的时间了。
题解:
1、十进制1位数直接在输入时塞进set里面,用set是刚好去重和排序效果我都需要
2、然后暴力计算2位、3位、4位(我是一点点试的啦,我觉得数据不会太大),题解说峰顶到1W
3、然后从0开始找到set中找不到的数就是最小值了
#include <bits/stdc++.h> using namespace std; int a[1005],b[10]; set<int> di; int main() { int n,x; cin >> n; for(int i = 0;i < n;i++) { cin >> a[i]; di.insert(a[i]); } for(int i = 1;i < n;i++) { x = a[i-1] * 10 + a[i]; di.insert(x); } for(int i = 2;i < n;i++) { x = a[i-2] * 100 + a[i-1] * 10 + a[i]; di.insert(x); } for(int i = 3;i < n;i++) { x = a[i-3] * 1000 + a[i-2] * 100 + a[i-1] * 10 + a[i]; di.insert(x); } int cnt = 0; for(set<int>::iterator it = di.begin();it != di.end();++it) { if(cnt != *it) { cout << cnt << endl; return 0; } cnt++; } return 0; }