bzoj3917【Baltic2014】sequence
2016-05-11 00:25
543 查看
3917: [Baltic2014]sequence
Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 190 Solved: 90
[Submit][Status][Discuss]
Description
序列A由从N开始的连续K个数按顺序构成,现在将A中的每个数只保留某一个数码,记为序列B,给定K和B,求可能的最小的NInput
第一行一个数K,第二行K个数B_iOutput
输出一个数NSample Input
67 8 9 5 1 2
Sample Output
47HINT
K<=100000,0<=B_i<=9N是正整数
APIO2016练习赛第二题
对于一个数,会有一些数必须要填,我们用一个二进制数来记录这些限制。
我们考虑从低到高依次处理每一位,对于每一位枚举所有数,然后递推得到下一位的限制信息,这样直到处理到最后。
有一种情况比较特殊,n≤2&&i==9的时候下一位不能填9,否则会停不下来,算是一个搜索的终止状态。
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<algorithm>
#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<<i))
{
ret=ret*10+i;
if (ret==i&&(a[1]&1)) ret*=10;
}
if (ret==0&&(a[1]&1)) ret=10;
return ret;
}
int b[maxn],cnt=0;
F(i,0,9)
{
if (i==9&&!flag) break;
int num=0,now=i;cnt=0;bool p=false;
F(j,1,n)
{
num|=a[j]&(1023-(1<<now));
if ((a[j]&1)&&now==0) p=true;
now=(now+1)%10;
if (!now||j==n) b[++cnt]=num,num=0;
}
ll ans=solve(b,cnt,i<9||n>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<<read();
printf("%lld\n",solve(a,n,1));
}
相关文章推荐
- [LeetCode] 347. Top K Frequent Elements 解题思路 - Java
- ui-router
- 雷军其实想用小米Max和MIUI 8告诉你:手握2亿用户,我们该怎么飞
- UIPageControl使用
- jquert confirm each
- UI控件无法响应点击等事件的探索
- android 蓝牙各种UUID
- rails invalid byte sequence in US-ASCII
- Java中String、StringBuffer、StringBuilder简述及区别
- iOS9开发最简单的设置导航栏透明UINavigationBar透明
- 在Android Studio中进行单元测试和UI测试
- Android高级UI控件—ListView
- Queue.Queue vs collections.deque
- UIKIT点击事件中的职责链模式
- nessue6.6.2安装与离线激活
- UE4:旋转导致包围球体半径变化
- STL系列之三 queue 单向队列
- EasyUI学习笔记
- Glib学习(3) 双端队列 Double-ended Queues
- 一款FireBird3的GUI编辑器:FireBird Maestro V15.11.0.4