bzoj3917【Baltic2014】sequence

3917: [Baltic2014]sequence

Time Limit: 10 Sec   Memory Limit: 256 MB
Submit: 190   Solved: 90
[ Submit][ Status][ Discuss]

Description

 序列A由从N开始的连续K个数按顺序构成,现在将A中的每个数只保留某一个数码,记为序列B,给定K和B,求可能的最小的N

Input

第一行一个数K,第二行K个数B_i

Output

输出一个数N

Sample Input

6
7 8 9 5 1 2

Sample Output

47

HINT

K<=100000,0<=B_i<=9

N是正整数



APIO2016练习赛第二题

对于一个数,会有一些数必须要填,我们用一个二进制数来记录这些限制。

我们考虑从低到高依次处理每一位,对于每一位枚举所有数,然后递推得到下一位的限制信息,这样直到处理到最后。

有一种情况比较特殊,n≤2&&i==9的时候下一位不能填9,否则会停不下来,算是一个搜索的终止状态。




#include
#include
#include
#include
#include
#include
#define F(i,j,n) for(int i=j;i<=n;i++)
#define D(i,j,n) for(int i=j;i>=n;i--)
#define ll long long
#define maxn 100005
using namespace std;
int a[maxn];
inline int read()
{
	int x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
inline ll solve(int *a,int n,int flag)
{
	ll ret=1ll<<60;
	if (n==1)
	{
		ret=0;
		F(i,1,9) if (a[1]&(1<2)*10+i;
		if (!ans&&p) ans=10;
		ret=min(ret,ans);
	}
	return ret;
}
int main()
{
	int n=read();
	F(i,1,n) a[i]=1<


你可能感兴趣的:(搜索,OIer的狂欢)