原本我是在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. KMP算法的实现

    今天看到了一篇关于KMP算法的讲解的文章,很难得,讲得非常清楚.分享给大家,希望对大家有帮助.http://kb.cnblogs.com/page/176818/ 我自己基于这个讲解的内容作了一个实现 ...

  2. LeetCode-448. Find All Numbers Disappeared in an Array C#

    Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and ot ...

  3. google浏览器图标显示不正常怎么办

    taskkill /f /im explorer.exe rem 清理系统图标缓存数据库 attrib -h -s -r "%userprofile%\AppData\Local\IconC ...

  4. mysql B+树 Cardinality MRR

    B+树索引并不能找到一个给定键值的具体行,而是被查找数据行所在的页.然后数据库通过把页读入到内存,再在内存中进行查找,最后得到想要查找的数据. Show index from table. Cardi ...

  5. 转:JMeter 参数化之利用JDBC Connection Configuration从数据库读取数据并关联变量

    1.   下载mysql jar包 下载mysql jar包 http://dev.mysql.com/downloads/connector/j/ 网盘下载地址:mysql-connector-ja ...

  6. Linux系统编程初探系列之一:文件编程

    系统函数 int creat(const char* filename,mode_t mode) filename:需要创建的文件名(包含路径,缺省为当前路径) mode:创建模式 常见的创建模式有: ...

  7. A * B Problem Plus

    A * B Problem Plus 题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1402 FFT(模板题) (FFT的详细证明参见算法导 ...

  8. I’m stuck!

    I’m stuck! 问题描述 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', 'S', 'T'七个字符中的一个,分别表示如下意思: '#': 任何时候 ...

  9. 《JS权威指南学习总结--8.8.3 不完全函数》

    内容要点: 本节讨论的是一种函数变换技巧,即把一次完整的函数调用拆成多次函数调用,每次传入的实参都是完整实参的一部分,每个拆分开的函数叫做不完全函数(partial function),每次函数调用叫 ...

  10. 《JS权威指南学习总结--第五章语句》

    内容要点: 一.throw语句     所谓异常是当发生了某种异常情况或错误时产生的一个信号.     抛出异常就是用信号通知发生了错误或异常状况.     捕获异常时指处理这个信号,即采取必要的手段 ...