NC23324. Tachibana Kanade Loves Probability
描述
输入描述
第一行一个整数 T,表示有 T 组数据。
接下来每行包含四个整数 ,意义如「题目描述」所示。
输出描述
输出 T 行,每行输出 个数,表示答案。
注意同行的数字中间不需要用空格隔开。
示例1
输入:
5 2 3 2 3 1 7 1 7 2 5 1 3 12345 54321 3 10 12345 54321 100000 100010
输出:
66 1428571 400 72601756 78428232175
C++11(clang++ 3.9) 解法, 执行用时: 173ms, 内存消耗: 1544K, 提交时间: 2020-02-14 22:57:24
#include<iostream> using namespace std; int main() { int t; cin>>t; while(t--) { long long m,n,k1,k2; cin>>m>>n>>k1>>k2; long long ans=m,b=k1-1; long long a=10; while(b) { if(b&1) ans=ans*a%n; a=a*a%n; b>>=1; } for(int i=k1;i<=k2;i++) { ans*=10; cout<<ans/n; ans%=n; } cout<<endl; } return 0; }
C++14(g++5.4) 解法, 执行用时: 142ms, 内存消耗: 1636K, 提交时间: 2019-04-08 20:05:23
#include<stdio.h> #include<iostream> using namespace std; int main() { int T; cin>>T; while(T--) { int m,n,k1,k2; cin>>m>>n>>k1>>k2; long long t=k1-1,a=10,ans=m; while(t) { if(t&1) ans=ans*a%n; a=a*a%n; t/=2; } for(long long i=k1;i<=k2;i++) { ans*=10; cout<<ans/n; ans%=n; } cout<<endl; } }
Python3(3.5.2) 解法, 执行用时: 1893ms, 内存消耗: 5872K, 提交时间: 2019-04-06 06:01:57
t = int(input()) i = 0 while i < t: m, n, k1, k2 = map(int, input().split()) ans = (m % n * pow(10, k1 - 1, n)) % n while k1 <= k2: print(ans * 10 // n, end="") k1 += 1 ans *= 10 ans %= n print("") i += 1