列表

详情


NC16120. 博弈论

描述

铁子和顺溜在学习了博弈论的sg函数之后,解决了很多很多博弈题,现在他们遇到了一道难题。
给出一个长度为 n 的数列,数列里的每个元素都是个位数,这个数列的每一个连续子数列都能生成
一个十进制数,对于子数列a[l~r],这个十进制数的个位为a[r],十位为a[r - 1],...,最高位
为a[l]。
现在铁子需要知道最小的不能被该数列的子数列生成的十进制非负整数是多少?

输入描述

第一行一个数字n。(1 ≤ n ≤ 1000)
第二行n个数字di。(0 ≤ di ≤ 9)

输出描述

输出一个数字表示答案。

示例1

输入:

4
3 0 1 2

输出:

4

示例2

输入:

10
9 8 7 6 5 4 3 2 1 0

输出:

11

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 7ms, 内存消耗: 520K, 提交时间: 2022-04-21 01:02:54

#include<bits/stdc++.h>
using namespace std;
string s;
int main(void)
{
	int n; cin>>n;
	while(n--) 
	{
		int x;cin>>x;
		s+=to_string(x);
	}
	for(int i=0;i<=2000;i++)
	{
		string a=to_string(i);
		if(s.find(a)==-1)
		{
			cout<<i;
			break;
		}
	}
	return 0;
}

C++14(g++5.4) 解法, 执行用时: 7ms, 内存消耗: 616K, 提交时间: 2018-06-17 17:59:54

#include<iostream>
#include<string>
using namespace std;
string s;
string a;
char c;
int main(){
	int n,i=0;
	cin>>n;
	while(n--){
		cin>>c;
		s+=c;
	}
	while(1){
		a=to_string(i++);
		if(s.find(a)==string::npos){
			cout<<a<<endl;
			break;
		}
	}
}

上一题