原本我是在word文档上写这种东西的,在杨老师的“强迫”下,我开始写了博客。

这是我在博客上的第一天,就先来个简单的,下面请看题:

试题描述
 有n个小伙伴(编号从0到n-1)围坐一圈玩游戏。按照顺时针方向给n个位置编号,从0到n-1。最初,第0号小伙伴在第0号位置,第1号小伙伴在第1号位置,……,依此类推。
    游戏规则如下:每一轮第0号位置上的小伙伴顺时针走到第m号位置,第1号位置小伙伴走到第m+1号位置,……,依此类推,第n−m号位置上的小伙伴走到第0号位置,第n-m+1号位置上的小伙伴走到第1号位置,……,第n-1号位置上的小伙伴顺时针走到第m-1号位置。
    现在,一共进行了10^k 轮,请问x号小伙伴最后走到了第几号位置。
输入
输入共1行,包含4个整数n、m、k、x,每两个整数之间用一个空格隔开。 
输出
输出共1行,包含1个整数,表示10^k轮后x号小伙伴所在的位置编号。
输入示例
10 3 4 5
输出示例
5
其他说明
数据范围:0<n<10^6,0<m<n,0<x<=n,0<k<10^9

题目看起来比较简单。最终解应该就是(x+n*10^k)%n。如果这都想不到的话,那就没救了。

其他都好处理关键是这个10^k怎么处理,数据范围中0<k<10^9,如果真一个一个往上乘以10的话肯定没戏。

怎么办呢,有一个高级的东西叫做快速幂。

第一次听说是初二时寒假上课杨老师讲的,但是早就忘光了。今天重新复习了一遍。

快速幂有两种方法,先说一种比较简单理解的,递归法

我们要求的是x^n,由于乘法公式,当n为偶数时原式可化为x^n=(x*x)^(n/2),这样递归就转为了当n/2的情况。当n为奇数时就是x^n=(x*x)^(n/2)*x,也同样可以转化,这样的话,n每次减半,时间复杂度为O(log 2 (n)),代码在下面。

 typedef long long LL;
LL mod_pow2(LL x,LL n,LL m)
{
if(n==) return ;
LL ans=mod_pow2(x*x,n/,m);
if(n&)ans=ans*x%m;
return ans;
}

还有一种方法,是基于n的二进制数的。假设n=2^k,则可以表示为x^n=x^2^2^…^2,这样我们做简单的k次平方运算就可以求出x^n的值了。

把问题转为一般化,若n!=2^k,将n转化为一些2次方的和,n=2^k2+2^k2+…,每个数都能完成这样的操作,因为这其实就是二进制。

知道上面的,既可以轻易的得出x^n=x^2^k1*x^2^k2*……

举个例子22的二进制数是10110,那么x^22=x^16*x^4*x^2.这些16,4,2的数其实就是22的二进制数上1所对应的数值。

代码送上:

 typedef long long LL;
LL mod_pow1(LL x,LL n,LL m)
{
LL ans=;//计算总和
while(n>)
{
if(n&)ans=ans*x%m;//n&1的意思是n的二进制最后一位是否等于1
x=x*x%m;
n>>=;//n的二进制数整体向右移一位
}
return ans%m;
}

将快速幂复习后,这道题简直是水到家了,代码就不写了。

第一次写博客,写的比较渣,好多地方语言表达不妥当,看着以后进步吧。

还有下回我管老师要一个数学公式编辑器,网上的需要花钱,等有了公式编辑器写数学推导就舒服多了。

小飞淙在博客上的第一天——NOIP201505转圈游戏的更多相关文章

  1. 使用Python在自己博客上进行自动翻页

    先上一张代码及代码运行后的输出结果的图! 下面上代码: # coding=utf-8 import os import time from selenium import webdriver #打开火 ...

  2. 在技术胖博客上学习ES6遇到的坑和想法

    第一节:ES6的开发环境搭建 坑1:全局安装babel-cli已经不被官方推荐,改为局部安装(cnpm install babel-cli --save-dev): 坑2:babel src/inde ...

  3. wordpress如何利用插件添加优酷土豆等视频到自己的博客上

    wordpress有时候需要添加优酷.土豆等网站的视频到自己的博客上,传统的分享方法不能符合电脑端和手机端屏幕大小的需求,又比较繁琐,怎样利用插件的方法进行添加呢,本视频向你介绍一款这样的插件——Sm ...

  4. 给自己的博客上添加个flash宠物插件

    前言 最近在一些博主的博客上看到一些小宠物的挂件,很有趣,访客到了网站后可以耍耍小宠物,增加网站的趣味性,在功能强大的博客系统上看到有这样的小宠物挂件还是蛮有趣的. 正文 下面就简单介绍下如何在博客园 ...

  5. 最近准备把安卓和java的知识再回顾一遍,顺便会写博客上!千变万化还都是源于基础,打扎实基础

    最近准备把安卓和java的知识再回顾一遍,顺便会写博客上!千变万化还都是源于基础,打扎实基础,加油吧 距离去北京还有23天

  6. 如何给自己的博客上添加个flash宠物插件

    最近在一些博主的博客上看到一些小宠物的挂件,很有趣,访客到了网站后可以耍耍小宠物,增加网站的趣味性,在功能强大的博客系统上看到有这样的小宠物挂件还是蛮有趣的. 多次差找资料后,终于在http://ww ...

  7. 我博客上的围棋js程序

    作为一个围棋爱好者,就决定在博客里加个围棋js程序.于是,申请了博客的js权限,美化美化我的博客. 好在js的语法像C系的,看了看,写个程序应该还是可以的. 围棋里,设计好基本的数据结构: //a是1 ...

  8. SLAM方向公众号、知乎、博客上有哪些大V可以关注?

    一.公众号 泡泡机器人:泡泡机器人由一帮热爱探索并立志推广机器人同时定位与地图构建(SLAM)技术的极客创办而成,通过原创文章.公开课等方式分享SLAM领域的数学理论.编程实践和学术前沿. ​ 经典文 ...

  9. 【hexo博客搭建】本地搭建hexo博客(上)

    前言 本篇文章会从本地(Windows 10)搭建-主题更换-部署阿里云详细步骤,如果在搭建过程中,遇到问题,可以通过博客页脚下的QQ联系我,或者在下面评论留言 一.本地搭建 1.安装前置 1.1安装 ...

随机推荐

  1. 使用NCoding归档进行存储数据时候报错

    问题:Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Demo1.UserInfo ...

  2. flask安装首页显示

    参考:http://flask.pocoo.org/1.安装和测试[root@node1 flask]#pip install flaskd[root@node1 flask]# cat app.py ...

  3. Hadoop fs 命令详解

    1. 环境:hadoop-2.6.0 2. 参数说明: hadoop fs [-appendToFile <localsrc> ... <dst>] [-cat [-ignor ...

  4. 微信小程序开发详解——小程序,大颠覆!

    微信小程序开发 联系 苏念 188.1414.7927  微信小程序系统开发 微信新功能开发 小程序开发 小程序怎么开发 app小程序开发 简化小程序开发 微信小程序定制 小程序制作 开发微信小程序  ...

  5. FD.io vpp 框架转发图

    在ip4-icmp-input 与 ip4-udp-input后可以注册后续的处理函数,ip4-icmp-input根据 icmp的报文类型选择相应的处理函数,而ip4-udp-input根据端口选择 ...

  6. linux 文件和目录操作

    1 相对路径和绝对路径 (与C++中概念相似) cd /root/cat 绝对路径 cd ../文件名/ 相对路径,指相对某个文件而言的 2 切换目录 cd  当前目录 进入某个目录 pwd 显示当前 ...

  7. Weex-进阶笔记二

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Helvetica; color: #945200 } p.p2 { margin: 0.0p ...

  8. filter过滤action的问题

    今天犯了一个错误,结果白白浪费了半个下午的时间,特记于此. filter过滤Action的时候,要把过滤器配置在Struts2拦截器的前面,这样过滤器才能过滤到Action,否则不可以.

  9. 第一百零一节,JavaScript流程控制语句

    JavaScript流程控制语句 学习要点: 1.语句的定义 2.if 语句 3.switch语句 4.do...while语句 5.while语句 6.for语句 7.for...in语句 8.br ...

  10. JS复习:第二十二章

    一.高级函数 1.在任何值上调用Object原声的toString( )方法,都会返回一个[object NativeConstructorName]格式d字符串.每个类在内部都有一个[[Class] ...