51 nod 1521 一维战舰 时间复杂度O(n),同 Codeforces 567D. One-Dimensional Battle Ships 有详细注释
题目:51nod:
题目Codeforces:
题目注意到两个战舰不能挨在一起就可以了。
- // 每一段
- struct node{
- int left; // 段的左端点
- int right; // 段的右端点
- int length; // 段长度
- int ship; // 段最大容纳战舰数
- }arr[];
每一段可容纳战舰数:
ship*a + (ship - 1) <= length; --> ship = (length+1) / (a+1);(舍去小数部分)
构造出这么一个数据结构就简单了。
现在还有一个问题:找到说miss的点所在段还需要时间,就算是二分查找也需要O(log(n)),加上遍历的O(n),时间复杂度O(n*log(n))。
可不可能会超时呢?我认为有可能,所以保险起见,我用了一个数组index[i]表示第i个点所在的段,用空间换时间,比较值。
一次就AC了,思路就这么多,上代码把:
- #include <bits\stdc++.h>
- using namespace std;
- typedef long long ll;
- // 每一段
- struct node{
- int left; // 段的左端点
- int right; // 段的右端点
- int length; // 段长度
- int ship; // 段最大容纳战舰数
- }arr[];
- int len = ; // 段的数量
- int index[]; // 每一个点所处的段
- int n,k,a,m;
- int miss; // 每一次说miss的位置。
- int sumShip = ; // 现阶段可容纳最多战舰数
- // 获取某段可容纳最大战舰数量
- int maxShip(node node1){
- return (node1.length+)/(a+);
- }
- //初始化
- void init(){
- arr[].left = ;arr[].right = n;
- arr[].length = arr[].right - arr[].left + ;
- arr[].ship = maxShip(arr[]);
- sumShip = arr[].ship;
- len = ;
- }
- //更新段
- void updataNode(int miss){
- int con = index[miss]; // miss位置所在段
- node* x = &arr[con]; //取出这个段
- int shipNum = x->ship;
- arr[len].left = miss+;
- arr[len].right = x->right;
- arr[len].length = arr[len].right - arr[len].left + ;
- arr[len].ship = maxShip(arr[len]);
- replace(index+arr[len].left,index+arr[len].right+ , con ,len); // 将其中一部分所在段改变
- x->right = miss-;
- x->length = x->right - x->left + ;
- x->ship = maxShip(*x);
- sumShip -= shipNum - arr[len].ship - x->ship; // 总容纳战舰数减少的数量等于分段后减少的战舰数量
- len++;
- }
- int main() {
- cin >> n >> k >> a >> m;
- init(); // 初始化
- for(int i = ;i <= m; ++i){
- cin >> miss;
- updataNode(miss); // 更新段
- if(sumShip < k){
- cout << i << endl;
- return ;
- }
- }
- cout << - << endl;
- return ;
- }
- //written by zhangjiuding.
代码中涉及到的replace是头文件algorithm中的,
replace(a+3,a+10,p,q);
表示的是将a[i](i = [3,9])中的p全部换成q。
51 nod 1521 一维战舰 时间复杂度O(n),同 Codeforces 567D. One-Dimensional Battle Ships 有详细注释的更多相关文章
- 51 nod 1521 一维战舰(二分)
传送门 题意 分析 这是我在51nod上的第2题,下载了4个数据,得不偿失?我太菜啦 一开始wa了6个点,下数据后发现舰与舰不能相邻,再交wa,发现l和r都没设好,再wa,发现check里面[1,b[ ...
- 51Nod 1521 一维战舰
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1521 思路:先计算出一开始最多能放多少艘战舰,然后每次输入一个点后,找到 ...
- 51 Nod 一维战舰
1521 一维战舰 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 爱丽丝和鲍博喜欢玩一维战舰的游戏.他们在一行 ...
- 51 nod 1766 树上的最远点对(线段树+lca)
1766 树上的最远点对 基准时间限制:3 秒 空间限制:524288 KB 分值: 80 难度:5级算法题 n个点被n-1条边连接成了一颗树,给出a~b和c~d两个区间,表示点的标号请你求出两个 ...
- 51 nod 1439 互质对(Moblus容斥)
1439 互质对 题目来源: CodeForces 基准时间限制:2 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 有n个数字,a[1],a[2],…,a[n].有一个集合,刚开 ...
- 51 nod 1495 中国好区间
1495 中国好区间 基准时间限制:0.7 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 阿尔法在玩一个游戏,阿尔法给出了一个长度为n的序列,他认为,一段好的区间,它的长度是& ...
- 51 nod 1427 文明 (并查集 + 树的直径)
1427 文明 题目来源: CodeForces 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 安德鲁在玩一个叫“文明”的游戏.大妈正在帮助他. 这个游 ...
- 51 nod 1055 最长等差数列(dp)
1055 最长等差数列 基准时间限制:2 秒 空间限制:262144 KB 分值: 80 难度:5级算法题 N个不同的正整数,找出由这些数组成的最长的等差数列. 例如:1 3 5 6 8 9 ...
- 51 nod 1421 最大MOD值
1421 最大MOD值 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 有一个a数组,里面有n个整数.现在要从中找到两个数字(可以 ...
随机推荐
- python 二进制转换
#二进制装换msg = "大家好"msg1 = msg.encode(encoding='utf-8')#转换成二进制print(msg1)msg2 = msg1.decode(' ...
- 【Linux部署 · GIT】在linux系统安装git和配置实现SSH
领导给了一个不开放ftp的测试库,让我部署项目.拿到一个全新的环境,真是个练手的好机会. 该操作系统为:CentOs release 6.5(Final) 由于不开放ftp,所以上传下载代码是非常麻烦 ...
- 基于SSM实现的简易员工管理系统
之前自学完了JAVA基础,一直以来也没有做什么好玩的项目,最近暑假,时间上比较空闲,所以又学习了一下最近在企业实际应用中比较流行的SSM框架,以此为基础,通过网络课程,学习编写了一个基于SSM实现的M ...
- 堆排序Java实现
package practice; import edu.princeton.cs.algs4.StdRandom; public class TestMain { public static voi ...
- 快速排序Java实现
package practice; import edu.princeton.cs.algs4.*; public class TestMain { public static void main(S ...
- 循环checked表单 元素
var poject_Array = ""; $('input[name="yearCardPoject"]:checked').each ...
- 移动端图片放大滑动查看-插件photoswipe的使用
最近在开发项目的时候,遇到一个需求,需要移动端实现放大查看图片的功能,然后我就在网上搜索了一下资料,看到了photoswipe这个插件,后来试了试,确实挺好用的,它可以实现手势放大缩小查看图片,左右滑 ...
- AOP TP框架有感
自学AOP感觉面向切面编程是一种利器,同时也是一种潜在的威胁.他就像一把手术刀,无论哪个器官有问题他都可以把他切开,修复它,但是使用的多了身体也会受不了... AOP应该算是面向对象的一种补充,但是, ...
- python--购物车优化
基本要求:用户入口1.商品信息存在文件里 2.已购商品.余额记录,长期保存, 即第一次启动是需要输入预算的,以后就拿剩下的钱买东西 商家入口 1.可以添加商品,删除商品,修改商品价格 2.按q可以退出 ...
- 团队作业4——第一次项目冲刺(Alpha版本) 日志集合处
第一天(2017.4.23) http://www.cnblogs.com/1413none/p/6752325.html 第二天(2017.4.24) http://www.cnblogs.com/ ...