题目描述

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行,包含一个整数,表示10^k轮后x号小伙伴所在的位置编号。

input
10 3 4 5
 
output
5
 
注释

对于 30% 的数据, 0<k<7;

对于 80% 的数据, 0<k<10^7;

对于 100% 的数据,1<n<1,000,000,0<m<n,0≤x≤n-1,0<k<10^9。

思路:第10^k轮后第0号小伙伴的位置为(m*10^k)%n,第x号小伙伴的位置为(x+(m*10^k)%n)%n

#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll; ll npow(ll x,ll n,ll mod)
{
ll res=;
while(n>)
{
if(n&)
res=(res%mod)*(x%mod)%mod;
x=(x%mod)*(x%mod)%mod;
n>>=;
}
return res;
} ll n,m,k,x;
int main(){ scanf("%lld%lld%lld%lld",&n,&m,&k,&x);
ll res=npow(,k,n);
res=(m*res)%n;
res=(res+x)%n;
printf("%lld",res);
return ;
}

最新文章

  1. 使用Spring Task轻松完成定时任务
  2. java: R文件重复
  3. UISearchController
  4. Linux vi 操作命令整理
  5. springMVC自定义注解实现用户行为验证
  6. 推荐ubuntu下的画图工具
  7. phpcms V9 首页模板文件解析
  8. Autocad 常用命令
  9. 用python做些有意思的事——分析QQ聊天记录——私人订制
  10. php xml转为xml或者json
  11. Matlab实现ItemBasedCF算法
  12. 怎样使用pyinstaller打包
  13. HTTP Cookie深入理解
  14. 环境变量配置为jdk8,显示的java版本为jdk7
  15. kubernetes云平台管理实战:如何创建deployment更好(九)
  16. Linux 管理环境变量的文件分为系统级和用户级别
  17. centos7.6删除重新安装python和yum
  18. rviz2
  19. CSS-3 box-shadow 的使用
  20. 【Java】详解菜单组件

热门文章

  1. 混合背包 hdu5410 CRB and His Birthday
  2. Spring延迟加载
  3. linux与python
  4. 重置浏览器的默认样式(css reset)
  5. WPF 基础到企业应用系列1——开篇故意
  6. soap webservice
  7. ARM architecture
  8. POJ 1753 (枚举+DFS)
  9. Active Directory的DirectoryEntry与DirectorySearcher初识及Filter语法
  10. Java8新特性(一)概览