UVa 11536 最短子序列(Smallest Sub-Array)
题意:
有n个0~m-1的整数组成一个序列。输入k,你的任务是尽量找到一个短一点的连续子序列使得该序列包含1-k的所有整数。
最大序列是生成的,生成在代码中
分析:
二分查找一个位置,长度a不成立 b成立 那么答案就在 (a, b] 之间,也就是这个时候不成立,左端点 + 1 右端点成立,右端点可以不变,也就有了代码里面的check后的变化。
代码:
#include<bits/stdc++.h>
#define LL long long
#define ms(s) memset(s, 0, sizeof(s))
using namespace std;
const int maxn = 1e6 + 10;
const int maxc = 1e3 + 10;
int a[maxn];
int N, M, K;bool check(int t) {int tot = 0;int cnt[maxc];ms(cnt);for(int i = 1; i <= N; i++) {if(tot == K) return true;if(a[i] <= K && cnt[a[i]]++ == 0) tot++;if(i > t && a[i - t] <= K && --cnt[a[i - t]] == 0) tot--;}if(tot == K) return true;return false;
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);ios::sync_with_stdio(false);cin.tie(0);int T;cin >> T;int kase = 0;while(T--) {cin >> N >> M >> K;a[1] = 1; a[2] = 2; a[3] = 3;for(int i = 4; i <= N; i++) {a[i] = (a[i - 3] + a[i - 2] + a[i - 1]) % M + 1;}int L = 1, R = N + 1;while(L < R) {int Mid = L + (R - L) / 2;if(check(Mid)) {R = Mid;} else {L = Mid + 1;}}//cout << L << endl;if(check(L)) cout << "Case " << ++kase << ": " << L << endl;else cout << "Case " << ++kase << ": " <<"sequence nai" << endl;}return 0;
}
UVa 11536 最短子序列(Smallest Sub-Array)相关推荐
- [JAVA]寻找满足和的最短子序列(Minimum Size Subarray Sum)
题目来源:leetcode 题目描述: Given an array of n positive integers and a positive integer s, find the minimal ...
- uva 11536——Smallest Sub-Array
题意:给定n个数,这n个数在m的范围之内.v[i]=(v[i-1]+v[i-2]+v[i-3])%m+1; 然后求一个最短连续子序列使得序列内包括1-k个数. 思路:枚举.枚举以v[i]结尾的最短 ...
- LA2678最短子序列
题意: 给你一个正整数序列,问你在里面找到一个最短的子序列,要求子序列的和大于等于k,输出序列长度. 思路: 这个序列的每个数字都是正整数,那么就比较好想了,我们可以直接枚举终 ...
- 字符串ababaaab的nextval数组值序列为_子序列解题模板:最长回文子序列
预计阅读时间:6 分钟 子序列问题是常见的算法问题,而且并不好解决. 首先,子序列问题本身就相对子串.子数组更困难一些,因为前者是不连续的序列,而后两者是连续的,就算穷举都不容易,更别说求解相关的算法 ...
- java最长回文子序列_算法--字符串:最长回文子序列
转自:labuladong公众号 子序列问题是常见的算法问题,而且并不好解决. 首先,子序列问题本身就相对子串.子数组更困难一些,因为前者是不连续的序列,而后两者是连续的,就算穷举都不容易,更别说求解 ...
- 【BZOJ】4032: [HEOI2015]最短不公共子串(LibreOJ #2123)
[题意]给两个小写字母串A,B,请你计算: (1) A的一个最短的子串,它不是B的子串 (2) A的一个最短的子串,它不是B的子序列 (3) A的一个最短的子序列,它不是B的子串 (4) A的一个最短 ...
- nyoj 133 子序列(尺取法+离散化)
子序列 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描述 给定一个序列,请你求出该序列的一个连续的子序列,使原串中出现的所有元素皆在该子序列中出现过至少1次. 如2 8 8 ...
- 程序员面试100题之十二:求数组中最长递增子序列
写一个时间复杂度尽可能低的程序,求一个一维数组(N个元素)中最长递增子序列的长度. 例如:在序列1,-1,2,-3,4,-5,6,-7中,其最长递增子序列为1,2,4,6. 分析与解法 根据题目要求, ...
- 求数组中最长递增子序列的长度
题目:写一个时间复杂度尽可能低的程序,求一个一维数组(N个元素)中最长递增子序列的长度. 例:在序列[1, -1, 2, -3, 4, -5, 6, -7]中,其最长递增子序列的长度为4([1, 2, ...
最新文章
- Fiddle抓包Https
- Ubuntu下搜狗输入法乱码(二)
- 2.6 更多导数例子-深度学习-Stanford吴恩达教授
- 密码学-hash加密
- Java黑皮书课后题第9章:9.2(Stock类)遵照9.2节中Cirlce类的例子,设计一个名为Stock的类
- ASP.NET数据库访问系列教程01-概述篇 创建数据访问层(下)
- 京东购物在微信等场景下的算法应用实践
- android.view.WindowManager$BadTokenException
- 打印倍数_英语精读:3d打印的速度有望提高到100倍
- Web前端工作笔记012---IE8兼容_WebSocket
- Java EE 6 最终草案暗示了平台的未来发展方向
- BT Openreach批发FTTP网络推出千兆宽带服务
- 中小银行传统数据仓库向大数据平台迁移探索
- the7主题footer.php,【Drupal7主题】Repro 清爽杂志门户Drupal 主题
- 七夕表白攻略:原来数学才是世界上最浪漫的学科!
- layim之初始化配置
- 手Q支付(QQ钱包)
- 基于反步法backstepping的自适应控制简介
- 气象数据免费下载(超级好用)
- Unity学习-配置vuforia