NC19872. [AHOI2005]SHUFFLE 洗牌
描述
输入描述
有三个用空格间隔的整数,分别表示N,M,L (其中0< N ≤ 10 ^ 10 ,0 ≤ M ≤ 10^ 10,且N为偶数)。
输出描述
单行输出指定的扑克牌的牌面大小。
示例1
输入:
6 2 3
输出:
6
C++(g++ 7.5.0) 解法, 执行用时: 2580ms, 内存消耗: 428K, 提交时间: 2022-11-04 21:31:17
#include<bits/stdc++.h> #define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0) using namespace std; int main() { IOS; long long n,m,l; cin>>n>>m>>l; for(int i=1;i<=m;i++) { if(l%2==1) l=(l/2)+(n/2)+1; else l/=2; } cout<<l; }
C++(clang++ 11.0.1) 解法, 执行用时: 2329ms, 内存消耗: 496K, 提交时间: 2023-03-28 21:42:19
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll n,m,l; int main() { cin>>n>>m>>l; for(ll i=1;i<=m;i++) { if(l%2==1) l=l/2+n/2+1; else l/=2; } cout<<l; return 0; }
Python3 解法, 执行用时: 49ms, 内存消耗: 4524K, 提交时间: 2022-04-22 14:57:53
n, m, l = map(int, input().split()) a = pow(2, m, n+1) print(l * pow(a, -1, n+1) % (n+1))