列表

详情


NC50550. 转圈游戏

描述

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号位置。
现在,一共进行了轮,请问x号小伙伴最后走到了第几号位置。

输入描述

输入共1行,包含4个整数n、m、k、x,每两个整数之间用一个空格隔开。

输出描述

输出共1行,包含1个整数,表示轮后x号小伙伴所在的位置编号。

示例1

输入:

10 3 4 5

输出:

5

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(g++ 7.5.0) 解法, 执行用时: 3ms, 内存消耗: 436K, 提交时间: 2022-11-10 16:43:52

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
ll qmi(ll a,ll b,ll mod)
{
    ll res =1;
    while(b)
    {
        if(b&1) res=res*a%mod;
        a=a*a%mod;
        b>>=1;
    }
    return res;
}
int main()
{
    ll n,m,k,x;
    cin>>n>>m>>k>>x;
    cout<<(x+qmi(10,k,n)*m%n)%n<<endl;
}

C++14(g++5.4) 解法, 执行用时: 6ms, 内存消耗: 484K, 提交时间: 2019-08-21 08:58:09

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll ksm(ll x,ll y,ll mod){
	ll res=1;
	while(y){
		if(y&1)
			res=res*x%mod;
		x=x*x%mod;
		y>>=1;
	}
	return res;
}
int main(){
	ll n,m,k,x;
	scanf("%lld%lld%lld%lld",&n,&m,&k,&x);
	printf("%lld\n",(x+m*ksm(10,k,n)%n)%n);
} 

C++ 解法, 执行用时: 3ms, 内存消耗: 444K, 提交时间: 2021-08-07 16:25:02

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,m,k,x;
	cin>>n>>m>>k>>x;
	int t=10;
	int ans=1;
	while(k)
	{
		if(k&1)
		ans=ans*t%n;
		t=t*t%n;
		k=k>>1;
	}
	ans=ans*m%n;
	ans=(ans+x)%n;
	cout<<ans;
	return 0;
} 

Python3 解法, 执行用时: 62ms, 内存消耗: 7028K, 提交时间: 2021-07-07 15:01:22

import math
n,m,k,x=map(int,input().split())
a=n*m
k=pow(10,k,a)
x+=k*m
print(int(x%n))

上一题