题目大意:

有一串数,长度为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相关推荐

  1. 【CentOS】利用Kubeadm部署Kubernetes (K8s)

    [CentOS]利用Kubeadm部署Kubernetes (K8s)[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.具体实验流程 1 系统准 ...

  2. 【Spring】框架简介

    [Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...

  3. 【C#】类——里式转换

    类是由面对对象程序设计中产生的,在面向结构的程序设计例如C语言中是没有类这个概念的!C语言中有传值调用和传址调用的两种方式!在c语言中,主方法调用方法,通过传递参数等完成一些操作,其中比较常用的的数据 ...

  4. 【C#】Out与ref是干什么的?

    关于return: 1.最后没有写 return 语句的话,表示程序正常退出 2.不需要返回值时,存在return的作用 例子 void main() {return; //return退出该程序的作 ...

  5. 【软件工程】RUP与软件开发5大模型

    软件开发的5大模型 1.瀑布模型:按照人的思维一步一步的开发下去,如果需求分析得当,每个阶段顺利,结果还不错! 2.快速原型模型:后来人们发现,自己不可能一下子就把所有的需求搞清楚,总是在开发的过程中 ...

  6. 【VB】学生信息管理系统5——数据库代码

    这次学生信息管理系统在代码的理解过程中遇到了一些问题.总结如下: 1. sql server的安装过程各个步骤的意思.在安装SQL Server的时候按照网上的步骤,我觉得这个需要学完整个数据库再返回 ...

  7. 白化(预处理步骤)【转】

    白化(预处理步骤)[转] 介绍 我们已经了解了如何使用PCA降低数据维度.在一些算法中还需要一个与之相关的预处理步骤,这个预处理过程称为白化.举例来说,假设训练数据是图像,由于图像中相邻像素之间具有很 ...

  8. 【Tensorflow】tf.nn.atrous_conv2d如何实现空洞卷积?膨胀卷积

    介绍 关于空洞卷积的理论可以查看以下链接,这里我们不详细讲理论: 1.Long J, Shelhamer E, Darrell T, et al. Fully convolutional networ ...

  9. 兑换量子计算机,阅读 | 【量子计算机】构造置换量子门

    原标题:阅读 | [量子计算机]构造置换量子门 量子计算机的一个基本组成单位叫量子门(quantum gate),下面简单介绍些基本概念. 量子比特和量子态 量子计算机的信息存储单元是一种叫做量子比特 ...

  10. 【Gamma】“北航社团帮”展示博客

    目录 团队介绍 项目愿景 整个项目的预期典型用户 功能展示 原预期用户数量 项目使用情况数据分析 用户量变化 学生认证人数 社长认证人数 入社申请数 活动发布 新闻发布 网页端使用情况 小程序打开次数 ...

最新文章

  1. 锁究竟锁住的是什么?
  2. IDEA git修改远程仓库地址
  3. LDD3中snull网络驱动程序的使用
  4. gromacs 安装_带你入门带你飞 gromacs材料计算模拟系列
  5. c语言课设报告函数的比较,c语言课程设计设计报告函数的调用关系图及主要算法.doc...
  6. IT人不要一辈子靠技术生存
  7. 字体系列之文字样式(CSS、HTML)
  8. sql server中case的简单示例
  9. linux android 电容 触摸屏驱动 差别,Android 4.0 触摸屏驱动调试记录
  10. C语言判断素数(求素数)
  11. cydia软件路径_cydia软件包路径
  12. 计算广告小窥[中]这孙子怎么什么都知道
  13. Nagios nsca插件进程突然死掉
  14. BZOJ4833: [Lydsy1704月赛]最小公倍佩尔数-数论
  15. 白话电子签章原理及风险
  16. python常用的第三方库
  17. Win32输入法编程技术的分析研究
  18. 盒子模型基本介绍及知识点
  19. 查看网站黑链的几种方法
  20. Kotlin 简单的闹钟代码

热门文章

  1. Radis还年轻,代替MySQL还言之过早
  2. Python小程序(4)--52周存钱挑战
  3. 各种排序是否稳定,不稳定是为什么
  4. 全球著名编程大赛地址
  5. 2022CUDA夏季训练营Day5实践
  6. 网易BUFF产品体验报告
  7. 一起学爬虫(Python) — 05
  8. 如何把Excel中表格复制粘贴到PPT中,并更改表格边框颜色
  9. Typora官网下载慢,用这个镜像
  10. 回归远程 - 云原生IDE是IaC从表象触达本质的必然选择 | SmartIDE