2017百度之星初赛(B)1001Chess------hdu6114
2017-08-13 18:09
295 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6114
分析:手推了下发现就是对应在一串n个方格上取m个车放(n>m),然后看下横着放和竖着放都一样的。所以就是C(n,m)
代码如下:
分析:手推了下发现就是对应在一串n个方格上取m个车放(n>m),然后看下横着放和竖着放都一样的。所以就是C(n,m)
代码如下:
#include<bits/stdc++.h> using namespace std; typedef long long LL; const int INF = 0x3f3f3f3f; const LL p = 1e9+7; LL sum = 0; LL n,m; LL pow_mod(LL a,LL b,LL p) { LL sum=1; while(b) { if(b&1) sum=(long long)sum*a%p; a=(long long)a*a%p; b>>=1; } return sum; } LL f(LL n,LL m,LL p) { if(n<m) return 0; if(m>n-m) m=n-m; LL sum=1; for(LL i=1;i<=m;i++) { sum=(long long)sum*(n-i+1)%p; LL a=pow_mod(i,p-2,p); sum=(long long)sum*a%p; } return sum; } LL Lucas(LL n,LL m,LL p) { if(m==0) return 1; LL sum=1; while(n&&m&&sum) { sum=(long long)sum*f(n%p,m%p,p)%p; n/=p; m/=p; } return sum; } int main() { LL T; while(scanf("%I64d",&T) !=EOF) { while(T--) { scanf("%I64d%I64d",&n,&m); if(n > m) swap(n,m); printf("%I64d\n",Lucas(m,n,p)); } } return 0; }
相关文章推荐
- 2017百度之星初赛(B)-1001Chess
- hdu6114 2017"百度之星"初赛(B)1001Chess(dp)
- 百度之星 2017初赛第一场 1001 小C的倍数问题
- 2017百度之星初赛B场第一题Chess--简单杨辉三角问题
- 2017百度之星初赛(B) 1001 Chess(思维+Lucas)
- 2017百度之星初赛(B) 1006 小小粉丝度度熊(尺取法)
- 51nod 1515 明辨是非 && 2017百度之星初赛第一场第二题(并查集+启发式合并)
- 百度之星2017初赛A轮 1001 小C的倍数问题
- 2017百度之星初赛a
- 2017百度之星初赛:B-1001. Chess
- 2017百度之星初赛(B) 1002 Factory(倍增法求LCA)
- 2017百度之星初赛A 今夕何夕
- 百度之星2017初赛A-1005-今夕何夕
- 2017百度之星初赛B Chess
- 2017百度之星初赛:B-1006. 小小粉丝度度熊(贪心+尺取)
- hdu 6119/2017百度之星初赛B——小小粉丝度度熊(尺取/贪心)
- 2017百度之星初赛(A) 1005 今夕何夕(阅读题)
- 2017百度之星初赛b
- 2017百度之星初赛:A-1002. 数据分割(并查集+set)
- 2017 百度之星 初赛B轮 HDU6114 HDU6118 HDU6119