原本我是在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. docker命令和后台参数

    Docker官方为了让用户快速了解Docker,提供了一个 交互式教程 ,旨在帮助用户掌握Docker命令行的使用方法. Docker 命令行 下面对Docker的命令清单进行简单的介绍,详细内容在后 ...

  2. maven打包配置

    maven打包配置,到底要打包哪些文件,如何配置?? <build> <finalName>weatherAdminSys</finalName> <plug ...

  3. 前端好的工具集推荐 lodash

    原来用 backbone 的时候, 感觉 underscore 是一个好的工具集,顿时感觉不错,不用自己一直去封装一些组件. 直到我遇到了 lodash,一只发现 web 项目中有依赖这个库的,但是一 ...

  4. yii2.0 面包屑的使用

    yii2中面包屑是yii2自带的小部件,类似本网站的导航栏应该就是采用面包屑来完成的 例子如下,需要引入 yii\widgets\Breadcrumbs echo Breadcrumbs::widge ...

  5. Struts2 Spring3 Hibernate3 集成xml版本

    Struts2 Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互 ...

  6. notepad++正则表达式替换字符串详解

    正则表达式是一个查询的字符串,它包含一般的字符和一些特殊的字符,特殊字符可以扩展查找字符串的能力,正则表达式在查找和替换字符串的作用不可忽视,它 能很好提高工作效率. EditPlus的查找,替换,文 ...

  7. Linux下SVN的简单配置

    1.安装svn sudo yum install subversion 2.查看是否安装成功 svnserve --version 3.创建svn目录 svnadmin create 目录名 例如:s ...

  8. Javaweb 第7天 Servlet课程

    Servlet课程 三日大纲 ● 网络概念,专业术语 ● Tomcat使用,发布网站,使用Myeclispe发布网站(搭建环境) ● 编写Servlet,Servlet生命周期 ● 用户注册,显示所有 ...

  9. 第四十七节,random 随机数模块

    random 随机数模块格式: import random 引入随机模块文件 random.randrange(65,91) 调用随机函数random.randrange(随机数开始范围,随机数结束范 ...

  10. HDU 1241Oil Deposits (DFS)

    Problem Description The GeoSurvComp geologic survey company is responsible for detecting underground ...