题目链接

每天都坚持写写

说实话很早就想写这道题了,但是一直不知道怎么解释那个算法,做完之后也看过聚聚的题解,说有一个什么数学结论,然而我研究了这么久都没有研究出什么数学结论,只能再试着看看了。虽然之前已经有了这道题的题解,但我这个做法估计并不是标准做法,而且还是挺快的,所以也就写一写了。

第一眼看到这道题的时候还是挺头疼的,看着这么巨大的数字,不知道哪里是突破口,找了一阵发现一个地方不错——k,因为k的值不是特别大所以感觉每次遍历一遍都可以消灭数量可观的数字,可以这么理解,每次数量都会乘以(k - 1) / k(当然因为n比k小的时候肯定要取模,所以那时候至少干掉一个,所以其实会比预期更快),这样估算一下每次的计算量肯定实在百万级。那么就这么思考了。

首先说一句,我这个方法太抽象了所以我也不保证一定讲的清楚。考虑每次的减少,会发现这次的数字和之前的数字是一个映射的关系,可以不断地映射从而使得这个值从每层递进从而确定在第一层的编号,当然存在两种映射,n比k大和n比k小的情况,这两种情况分别用一个编号判断,这样就可以快速解决这个问题了。

至于优化只做了一个地方就是k为1的情况,这个可以快速求解。

贴代码(估计没什么人看的懂。。。)

# include <stdio.h>
# include <algorithm>using namespace std;const int MAX_T = 20;
const int MAX_P = 200000;typedef pair<int , int> P;int N, K, T;
int J[MAX_T];P sea[MAX_T], box[MAX_P], Q[MAX_T];int pum, tum;void solve()
{int i, j;if(K == 1){for(i = 0 ; i < T ; i++)printf("%d%s", Q[i].first, (i == T - 1) ? "\n" : " ");return; }sort(Q , Q + T);for(i = 0 ; i < T ; i++){J[Q[i].second] = i;}int yu = 0, res = N, sum = 0;pum = tum = 0;while(res > 0 && tum < T){int at, bt;int nres, nyu, nsum;if(K > res){bt = 0;int nK = K % res;nK -= yu;at = nK % res;if(at <= 0)at += res;nres = res - 1;nyu = res - at;nsum = sum + 1;}else{bt = 1;int pe = (yu + res) / K;nres = res - pe;nyu = (yu + res) % K;nsum = sum + pe;at = yu;}box[pum++] = P(at , bt);//printf("%d %d\n", at, bt);while(Q[tum].first <= nsum && tum < T){if(bt == 0){sea[tum++] = P(at , pum - 1);}else{int yy = Q[tum].first - sum;sea[tum++] = P(yy * K - yu , pum - 1);}}res = nres;sum = nsum;yu = nyu;}for(i = 0 ; i < T ; i++){int ai = sea[J[i]].first, bi = sea[J[i]].second;//printf("%d %d\n", ai, bi);for(j = bi - 1 ; j >= 0 ; j--){if(box[j].second == 0){if(ai >= box[j].first)ai++;}else{ai = ai + (ai + box[j].first - 1) / (K - 1);}}printf("%d%s", ai, (i == T - 1) ? "\n" : " ");}
}int main()
{while(~scanf("%d %d %d", &N, &K, &T)){int i;for(i = 0 ; i < T ; i++){scanf("%d", &Q[i].first);Q[i].second = i;}solve();}return 0;
}

【xdoj难题集】 1018 Josephus环的复仇的复仇相关推荐

  1. 【xdoj难题集】1039: 饭桌上的游戏

    题的连接 2014年的压轴题,又是模拟(话说为什么最近做了这么多模拟).总之又是被无数细节给坑了,不过最后结果不错,我这个算法还是挺快的. 还是先说说想法,一看到这题的范围,觉得应该不会超时,比较烦的 ...

  2. 【xdoj难题集】1202 The Offer - Lunatic(附优化版)

    说实话2017年的校赛挺难的,最后三道都不简单,这道题一开始吓了我一大跳,想着如果用最短路算法,魔法阵怎么也要上千万条路径,不过之后看到海拔最高只有100之后总算是安心了. 先说一说大体思路,首先肯定 ...

  3. 【xdoj难题集】1102 xry111挂灯笼

    题目 这道题虽然做对的不多,但是我倒是做的异常顺利,直接一遍过,感觉在经历了pfunction之后已经领悟了新一层的dp技巧. 说说思路,就是dp递推,关键是掌握如何递推,首先考虑只有一个挂钩的情况, ...

  4. 【xdoj难题集】 1059: 英雄联盟

    题目链接 这道题做了有一阵了,之前一直不知道是什么问题,今天又回头看了看,试了试精度,发现之前的如果末尾是5会无法进位,改完之后就对了...精度真的是玄学问题,这个问题一定要重视,还是要积累一些经验. ...

  5. 第二集 第一魂环 第九章

    第二集 第一魂环 第九章 蓝银草的第一魂环(一) "魂师的修炼,在二十岁之前是一个极为重要的过程,可以说,二十岁以前的成绩,决定了未来的成就.三十级,是一个冰火两重天的门槛.二十岁以前,跨过 ...

  6. 第二集 第一魂环 第十章

    第二集 第一魂环 第十章 第一魂环技能(一) 而就在下一刻,他仿佛听到了一声清脆的破裂,紧接着,那股热流疯狂的散开,再融合.融合到一股乳白色的气流之中.原本的蜿蜒小溪瞬间变成了小河,淙淙流淌,所过之处 ...

  7. 第二集 第一魂环 第十二章

    第二集 第一魂环 第十二章 乱披风锤法(一) 门口的两名门卫看上去都是二十岁左右的样子,身上的魂力波动并不明显,感觉上,似乎连魂师的级别都没有达到.看来,诺丁城果然是偏僻,从武魂殿的级别就能看出这座城 ...

  8. Mobile Phone Network CodeForces - 1023F(并查集lca+修改环)

    题意: 就是有几个点,你掌控了几条路,你的商业对手也掌控了几条路,然后你想让游客都把你的所有路都走完,那么你就有钱了,但你又想挣的钱最多,真是的过分..哈哈 游客肯定要对比一下你的对手的路 看看那个便 ...

  9. Josephus环问题

    问题描述: 设编号为1,2,3,4.......,n个人按顺时针方向围坐一圈,约定编号为k(1<<k<<n)的人按顺时针方向从1开始报数,数到m的那个人出列,他的下一位又从1开 ...

最新文章

  1. 【java】牛客网刷题
  2. 基于大数据的Uber数据实时监控(Part 4:Spark Streaming、DataFrames和HBase)
  3. JavaScript高级程序设计44.pdf
  4. python_104_面向对象总结
  5. 关于在真实物理机器上用cloudermanger或ambari搭建大数据集群注意事项总结、经验和感悟心得(图文详解)...
  6. Account detail页面加载的性能分析 - 2017-09-25
  7. Spring依赖注入技术的发展
  8. php写不了php,php写入内存不足怎么办
  9. android标题栏的属性,android – 属性“titleTextStyle”已经定义?
  10. linux 背光驱动程序,Linux驱动工程师成长之路 LCD背光控制RT9379B
  11. 韩顺平php视频笔记83-87 防盗链 $_SERVER http协议相关 文件相关
  12. spring boot项目怎么记录用户操作行为和登录时间_6 个 Github 项目拿下 Spring Boot
  13. Spring中为什么要开启注解扫描
  14. linux文件权限中 chmod、u+x、u、r、w、x分别代表什么
  15. Introduction to Computer Networking学习笔记(二十七):BitTorrent
  16. c#调用python脚本效率_C# 调用python程序脚本(IronPython)
  17. java时间格式化工具类_java日期格式化工具类
  18. 华尔街持续唱多美股市场,微美全息发布VR设备领涨科技股
  19. c语言水电费系统,急求C水电费管理系统
  20. 博客网页设计制作 简单静态HTML网页作品 DIV CSS个人网页作业成品 dreamweaver学生个人博客网站模板

热门文章

  1. 给一个数加千分位格符C语言,给一个数值加千位分隔号
  2. 或许,国家疫情应急供应链体系应该这么建
  3. 翻译2:Journal of Financial Economics
  4. SpringBoot获取ServletContext和webApplicationConnect几种方法
  5. 记一个apk 丢包的bug
  6. 计算机教师教育理念,教学理念
  7. android调用网络打印机,Android下通过wifi调用打印机打印
  8. html设置loading,几个纯CSS实现的loading动画
  9. 面试之Java圣经8
  10. 快递代领--需求分析