牛客练习赛43 Tachibana Kanade Loves Probability(快速幂)

链接:https://ac.nowcoder.com/acm/contest/548/B
来源:牛客网

题目描述

立华奏在学习初中数学的时候遇到了这样一道大水题:
“设箱子内有 n 个球,其中给 m 个球打上标记,设一次摸球摸到每一个球的概率均等,求一次摸球摸到打标记的球的概率”
“emmm...语言入门题”
但是她改了一下询问方式:设最终的答案为 p ,请输出 p 小数点后 K1K1 到 K2K2 位的所有数字(若不足则用 0 补齐)

输入描述:

第一行一个整数 T,表示有 T 组数据。
接下来每行包含四个整数 m,n,K1,K2m,n,K1,K2,意义如「题目描述」所示。

输出描述:

输出 T 行,每行输出 K2−K1+1K2−K1+1 个数,表示答案。
注意同行的数字中间不需要用空格隔开。
示例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

思路:求第k1位的数字 其实就是 m*10^(k-1)对n求模 所以用快速幂处理一下 然后就模拟短除法就行了

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<bitset>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
#define ll long long int
using namespace std;
inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
inline ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
int moth[]={,,,,,,,,,,,,};
int dir[][]={, ,, ,-, ,,-};
int dirs[][]={, ,, ,-, ,,-, -,- ,-, ,,- ,,};
const int inf=0x3f3f3f3f;
const ll mod=1e9+;
ll m,n,k1,k2;
ll q_pow(ll a,ll n,ll mod){
ll ans=m; ll base=a;
while(n){
if(n&) ans=(ans*base)%mod;
base=base*base%mod;
n>>=;
}
return ans;
}
int main(){
//ios::sync_with_stdio(false);
int t;
scanf("%d",&t);
while(t--){
scanf("%lld%lld%lld%lld",&m,&n,&k1,&k2);
ll f=q_pow(,k1-,n);
ll i=k1;
while(){
f*=;
printf("%lld",f/n);
f%=n;
i++;
if(i==k2+)
break;
}
printf("\n");
}
}
上一篇:一个ubuntu phper的自我修养(ubuntu安装)


下一篇:quick pdf library控件