【codejam_Round1B_C】Mousetrap
题目大意:
有一串数,长度为K(K≤100000),从开头开始数,数到1,则这个数标为1,然后删除这个数,继续往后重新数2个,这个数标为2,然后删除这个数。如果后面没有数了就又回到开头继续。像这样:
1 · 2 · · 3 · · · 4 · · · · 5 · · · · · 6 · ·
继续:
1 · 2 · · 3 ·7· 4 · · · · 5 · · 8· · 6 · ·
(解释不清楚。。。有点像约瑟夫环,但是每次数的个数+1)
有n(n≤100)次询问,询问最后标号的数列的did_i位置是什么数。
分析:
原题解地址:https://code.google.com/codejam/contest/32017/dashboard#s=a&a=2
模拟:
直接暴力模拟:
O(K2)O(K^2) TIME LIMIT EXCEED
K−−√\sqrt K分块:
将序列分为K−−√\sqrt K块,模拟,当一块全部被删去时,就可以直接跳过,时间复杂度O(K1.5)O(K^{1.5})
线段树模拟:
O(logK)O(logK)的删除操作,时间复杂度O(KlogK)O(KlogK)
神奇方法:
考虑我们只计算要询问的值。
当我们要删除一个数时,可以将后面整个序列往前移一位,即把后面的询问全部-1。这样,每次向后面数个数时,就可以直接用加法处理:pos=(pos+(i-1))%(K-(i-1))
(pos表示当前要删的数的前一个,必须是前一个,如果pos表示当前那个数,因为这个数被删掉了,下次往下计算时就会多走一个)如果走到位置刚好是询问,则保存到答案数组里去。
时间复杂度O(Kn)O(Kn)
最优方法代码:
#include<cstdio>
#define MAXK 1000005
#define MAXN 105
int Q[MAXN],ans[MAXN];
int main()
{int T,K,n;scanf("%d",&T);for(int Case=1;Case<=T;Case++){scanf("%d%d",&K,&n);for(int i=1;i<=n;i++){scanf("%d",Q+i);ans[i]=0;}for(int i=1,pos=0;i<=K;i++){pos=(pos+i-1)%(K-(i-1));for(int j=1;j<=n;j++)if(!ans[j]){if(Q[j]==pos+1)ans[j]=i;else if(Q[j]>pos+1)Q[j]--;}}printf("Case #%d:",Case);for(int i=1;i<=n;i++)printf(" %d",ans[i]);printf("\n");}return 0;
}
【codejam_Round1B_C】Mousetrap相关推荐
- 【CentOS】利用Kubeadm部署Kubernetes (K8s)
[CentOS]利用Kubeadm部署Kubernetes (K8s)[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.具体实验流程 1 系统准 ...
- 【Spring】框架简介
[Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...
- 【C#】类——里式转换
类是由面对对象程序设计中产生的,在面向结构的程序设计例如C语言中是没有类这个概念的!C语言中有传值调用和传址调用的两种方式!在c语言中,主方法调用方法,通过传递参数等完成一些操作,其中比较常用的的数据 ...
- 【C#】Out与ref是干什么的?
关于return: 1.最后没有写 return 语句的话,表示程序正常退出 2.不需要返回值时,存在return的作用 例子 void main() {return; //return退出该程序的作 ...
- 【软件工程】RUP与软件开发5大模型
软件开发的5大模型 1.瀑布模型:按照人的思维一步一步的开发下去,如果需求分析得当,每个阶段顺利,结果还不错! 2.快速原型模型:后来人们发现,自己不可能一下子就把所有的需求搞清楚,总是在开发的过程中 ...
- 【VB】学生信息管理系统5——数据库代码
这次学生信息管理系统在代码的理解过程中遇到了一些问题.总结如下: 1. sql server的安装过程各个步骤的意思.在安装SQL Server的时候按照网上的步骤,我觉得这个需要学完整个数据库再返回 ...
- 白化(预处理步骤)【转】
白化(预处理步骤)[转] 介绍 我们已经了解了如何使用PCA降低数据维度.在一些算法中还需要一个与之相关的预处理步骤,这个预处理过程称为白化.举例来说,假设训练数据是图像,由于图像中相邻像素之间具有很 ...
- 【Tensorflow】tf.nn.atrous_conv2d如何实现空洞卷积?膨胀卷积
介绍 关于空洞卷积的理论可以查看以下链接,这里我们不详细讲理论: 1.Long J, Shelhamer E, Darrell T, et al. Fully convolutional networ ...
- 兑换量子计算机,阅读 | 【量子计算机】构造置换量子门
原标题:阅读 | [量子计算机]构造置换量子门 量子计算机的一个基本组成单位叫量子门(quantum gate),下面简单介绍些基本概念. 量子比特和量子态 量子计算机的信息存储单元是一种叫做量子比特 ...
- 【Gamma】“北航社团帮”展示博客
目录 团队介绍 项目愿景 整个项目的预期典型用户 功能展示 原预期用户数量 项目使用情况数据分析 用户量变化 学生认证人数 社长认证人数 入社申请数 活动发布 新闻发布 网页端使用情况 小程序打开次数 ...
最新文章
- 锁究竟锁住的是什么?
- IDEA git修改远程仓库地址
- LDD3中snull网络驱动程序的使用
- gromacs 安装_带你入门带你飞 gromacs材料计算模拟系列
- c语言课设报告函数的比较,c语言课程设计设计报告函数的调用关系图及主要算法.doc...
- IT人不要一辈子靠技术生存
- 字体系列之文字样式(CSS、HTML)
- sql server中case的简单示例
- linux android 电容 触摸屏驱动 差别,Android 4.0 触摸屏驱动调试记录
- C语言判断素数(求素数)
- cydia软件路径_cydia软件包路径
- 计算广告小窥[中]这孙子怎么什么都知道
- Nagios nsca插件进程突然死掉
- BZOJ4833: [Lydsy1704月赛]最小公倍佩尔数-数论
- 白话电子签章原理及风险
- python常用的第三方库
- Win32输入法编程技术的分析研究
- 盒子模型基本介绍及知识点
- 查看网站黑链的几种方法
- Kotlin 简单的闹钟代码