2018"百度之星"程序设计大赛 - 资格赛 - 题集

1001

$ 1 \leq m \leq 10 $

像是状压的复杂度。

于是我们(用二进制)枚举留下的问题集合

然后把这个集合和问卷们的答案集合 $ & $ 一下

就可以只留下被选中的问题的答案了。

之后扫一遍随便判一下重。

1002

非空子串中字典序最小的子串长度一定是 $ 1 $ 。

咱们就记录一下每一个字母出现次数的前缀和,

每次询问就找到出现过的最先的那个字符就星了。

1003

整数规划好像是个NPC问题,

所以我们肯定不能直接上整数规划。

咱们来尝试把问题转换一下。

n=2

x1---y1
  \ /
   X
  / x2---y2

看起来像是个二分图。

二分图我们可以想到什么呢?

KM算法。

它有一个奇特的性质,

就是假设 $ x_i $ 和 $ y_j $ 被一条边 $ a_{i,j} $ 匹配上,

那么 $ x_i $ 的标签 $ l_i $ 和 $ y_j $ 的标签 $ r_j $ 有这样一个式子是成立的:

$ l_i + r_j \geq a_{i,j} $

题目要求 $ l_i + r_j \leq a_{i,j} $ ?

把它变成 $ - l_i - r_j \leq -a_{i,j} $ ,

然后硬上KM就好了。

注意标签的初始值。

1004

如果你有好办法,

请教教我这个蒟蒻吧。

1005

我们先想一下动态规划。

设 $ f_{i,j} $ 表示以第 $ i $ 个数打止的长度为 $ j $ 的上升子序列个数。

首先 $ f_{i,1} = 1 $ 。

然后也可以知道 $ f_{i,j} = \sum{f_{k,j-1}} , k < i \quad \mathrm{and}\quad q_k < q_i $ 。

这可以用一些树状数组来帮助它转移。

但是 $ 1 \leq n \leq 10000 $ ...

注意一下这句话。

你可以认为给定的排列是从所有 1,2,...,n 的排列中等概率随机选出的。

如果是随机数据的话,我们可以得知,

它的最长的lis不会太长

可能长度只有几百也说不定。

1006

要答案最优的话,

就先只用条件中给定的2种颜色跑一遍最小生成树,

然后“恰好k条满足条件的边”的答案就用剩下的边从小往大加来更新答案。

把红绿和绿蓝的情况分别搞一下。

注意图可能不连通。

原文地址:https://www.cnblogs.com/finder-iot/p/9420143.html

时间: 2024-11-08 08:34:17

2018"百度之星"程序设计大赛 - 资格赛 - 题集的相关文章

2018&quot;百度之星&quot;程序设计大赛 - 资格赛

调查问卷 Accepts: 1546 Submissions: 6596 Time Limit: 6500/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Problem Description 度度熊为了完成毕业论文,需要收集一些数据来支撑他的论据,于是设计了一份包含 mm 个问题的调查问卷,每个问题只有 'A' 和 'B' 两种选项. 将问卷散发出去之后,度度熊收到了 nn 份互不相同的问卷,在整理结果的时候

2014年百度之星程序设计大赛 资格赛第一题 (longlong)

解题思路: 只要看(A-V)*K 这个公式的更新值是否大于等于A ,大于的话继续循环,否则报错 注意一点,数据会爆int WA代码: #include<stdio.h> int main(){ long long n ,m, v, k; int t; scanf("%d",&t); while(t--){ scanf("%lld%lld%lld%lld",&n,&m,&v,&k); int cnt = 0; whi

2014年百度之星程序设计大赛 - 资格赛

主要是卡了一下 接下来2题还在做 都有思路 1001 考虑完全就行了 #include <cstdio> #include <cstring> using namespace std; int main() { int T; scanf("%d", &T); while(T--) { __int64 n, m, v, k; scanf("%I64d %I64d %I64d %I64d", &n, &m, &v,

2014年百度之星程序设计大赛 - 资格赛 1002 Disk Schedule(双调欧几里得旅行商问题)

Problem Description 有很多从磁盘读取数据的需求,包括顺序读取.随机读取.为了提高效率,需要人为安排磁盘读取.然而,在现实中,这种做法很复杂.我们考虑一个相对简单的场景.磁盘有许多轨道,每个轨道有许多扇区,用于存储数据.当我们想在特定扇区来读取数据时,磁头需要跳转到特定的轨道.具体扇区进行读取操作.为了简单,我们假设磁头可以在某个轨道顺时针或逆时针匀速旋转,旋转一周的时间是360个单位时间.磁头也可以随意移动到某个轨道进行读取,每跳转到一个相邻轨道的时间为400个单位时间,跳转

2014年百度之星程序设计大赛 - 资格赛 1004 -- Labyrinth

Labyrinth Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1453    Accepted Submission(s): 500 Problem Description 度度熊是一只喜欢探险的熊,一次偶然落进了一个m*n矩阵的迷宫,该迷宫只能从矩阵左上角第一个方格开始走,只有走到右上角的第一个格子才算走出迷宫,每一次只能走一格,

hdu 6082 度度熊与邪恶大魔王(2017&quot;百度之星&quot;程序设计大赛 - 资格赛 )

度度熊与邪恶大魔王 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 251    Accepted Submission(s): 125 Problem Description 度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来.邪恶大魔王的麾下有n个怪兽,每个怪兽有a[i]的生命值,以及b[i]的防御力.度度熊一共拥有m种攻击方式,第i

2014年百度之星程序设计大赛 - 资格赛 1001 Energy Conversion

Energy Conversion Problem Description 魔法师百小度也有遇到难题的时候-- 现在,百小度正在一个古老的石门面前,石门上有一段古老的魔法文字,读懂这种魔法文字需要耗费大量的能量和大量的脑力. 过了许久,百小度终于读懂魔法文字的含义:石门里面有一个石盘,魔法师需要通过魔法将这个石盘旋转X度,以使上面的刻纹与天相对应,才能打开石门. 但是,旋转石盘需要N点能量值,而为了解读密文,百小度的能量值只剩M点了!破坏石门是不可能的,因为那将需要更多的能量.不过,幸运的是,作

2014年百度之星程序设计大赛 - 资格赛 1004 Labyrinth(Dp)

# -*- coding: utf-8 -*- """ Created on Fri May 16 17:24:05 2014 @author: lifeix """ #快速排序 import sys import random length = 30 def qsort(arr,left,right): lp = left rp = right if lp == rp:return while True: while arr[lp] >=

2015年百度之星程序设计大赛 - 资格赛:IP聚合

1 /* 2 pro:2015年百度之星程序设计大赛 - 资格赛:IP聚合 3 ID:forever95 4 Date:2015-5-25 5 */ 6 //事实证明C++就是一坨屎 7 #include <iostream> 8 #include <string> 9 #include <cstdio> 10 #include <cstdlib> 11 #include <istream> 12 #include <algorithm&g