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<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));
}
时间: 2024-10-12 10:47:28

bzoj3917【Baltic2014】sequence的相关文章

【dfs】Sequence Decoding

Sequence Decoding 题目描述 The amino acids in proteins are classified into two types of elements, hydrophobic (nonpolar) and hydrophilic (polar). Hydrophobic and hydrophilic are denoted by H and P respectively. A protein is represented by a sequence of H

【BZOJ-1367】sequence 可并堆+中位数

1367: [Baltic2004]sequence Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 932  Solved: 348[Submit][Status][Discuss] Description Input Output 一个整数R Sample Input 7 9 4 8 20 14 15 18 Sample Output 13 HINT 所求的Z序列为6,7,8,13,14,15,18.R=13 Source Solution 论文

【BZOJ3916】【Baltic2014】friends 暴力

链接: #include <stdio.h> int main() { puts("转载请注明出处[vmurder]谢谢"); puts("网址:blog.csdn.net/vmurder/article/details/44893857"); } 前言 妈呀我调了两个多小时, 就特么因为一个运算符优先级的问题?--!!! 太弱了.你们D我吧,那道题的提交都是我刷上去的Qwq 题解 首先S串如果存在,一定是U串(长度姑且设为2n+1,偶数则直接impos

【LeetCode】Longest Consecutive Sequence 解题报告

[题目] Given an unsorted array of integers, find the length of the longest consecutive elements sequence. For example, Given [100, 4, 200, 1, 3, 2], The longest consecutive elements sequence is [1, 2, 3, 4]. Return its length: 4. Your algorithm should

【POJ】2278 DNA Sequence

各种wa后,各种TLE.注意若AC非法,则ACT等一定非法.而且尽量少MOD. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <queue> 5 using namespace std; 6 7 #define MAXN 105 8 #define NXTN 4 9 10 char str[15]; 11 12 typedef struct Matrix {

POJ 2442 Sequence【堆】

题目链接:http://poj.org/problem?id=2442 题目大意:给出一个m*n的矩阵,从每一行中取出一个数相加,能得到n^m个不同的结果,要求输出其中前n项. 建立一个以n元数组为底层数组的堆,在这里,利用stl中的make_heap,pop_heap,push_heap等函数解决. 1.将第一组数据输入arr1数组,升序排序. 2.将接下来的数据输入到arr2数组中,并且heap[i]=arr1[0]+arr2[0...n-1],make_heap(heap,heap+n).

【LeetCode】Longest Consecutive Sequence

Given an unsorted array of integers, find the length of the longest consecutive elements sequence. For example,Given [100, 4, 200, 1, 3, 2],The longest consecutive elements sequence is [1, 2, 3, 4]. Return its length: 4. Your algorithm should run in

【POJ 2442】Sequence

[POJ 2442]Sequence 优先队列 m个序列 每个序列n个数 从每个序列中取一个数 可以组成一个长为m的序列 这样一共有n^m种组法 把所有组合的加和排序后输出前n小的和 乍一看听高深的一个问题 其实想清楚了很简单 每一组中取一个数相加 第一组可以有n种取法 假设当前只有两组 按题意组合就是将第一组中n个数分别与第二组n个数相加 取出前n小的和 那么现在再来一组 前两组一共有n*n种组合 每种组合与第三组中n个数再组合 前n小的和就是结果 这三组一共有n^3种组合 然而答案只需要前n

【BZOJ1367】[Baltic2004]sequence 左偏树

[BZOJ1367][Baltic2004]sequence Description Input Output 一个整数R Sample Input 7 9 4 8 20 14 15 18 Sample Output 13 HINT 所求的Z序列为6,7,8,13,14,15,18.R=13 题解:详见论文 然而本题要求z[i]严格递增,那就让所有t[i]-=i就好了 #include <cstdio> #include <cstring> #include <iostrea