原本我是在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. datagrid、easyui-dialog

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. ansible role 执行顺序

    the dependencies of the 'openshift-master' role.- docker- openshif_common  - os_firewall   - openshi ...

  3. 最受欢迎的iOS第三方SDK

    http://www.raywenderlich.com/forums/viewtopic.php?t=4496

  4. 关于PHP的一小段代码求解如下求解"%2\$s"

    <?php$format = "The %2\$s contains %1\$d monkeys";printf($format, 8, "北京");?& ...

  5. Javaweb 第6天JDBC课程

    JDBC课程 两日大纲 ● JDBC基本操作 ● 预设语句对象 ● 自定义数据库工具类 ● JDBC批处理 ● 事务 ● 连接池 *********************************** ...

  6. Chapter 2 Open Book——26

    "Oh." He let it drop. I looked away awkwardly. 哦,他让它走了.我笨拙的看向别处. "哦."他不再纠缠于这个问题. ...

  7. python网络编程之网络主机信息

    功能: 获取设备名称 方法: gethostname() 参数: 返回值:hostname(string) 功能: 获取设备ipv4地址 方法: gethostbyname() 参数: hostnam ...

  8. 第六十三节,html表格元素

    html表格元素 学习要点:     1.表格元素总汇     2.构建表格解析     本章主要探讨HTML5中表格元素的用法.表格的主要用途是以网格的形式显示二维数据. 一.表格元素总汇     ...

  9. Hack写法

    文章来源: http://www.w3cplus.com/css/create-css-browers-hacks 条件注释:http://www.w3cplus.com/create-an-ie-o ...

  10. html5权威指南:表格元素

    第十一章:表格元素                                                                                           ...