CodeVS2505 上学路线
链接
http://codevs.cn/problem/2505/
题解
根据结论,我们要求的是
C_{n+m-2}^{n-1}
这很容易….但,这道题是高精度!
这让人很不爽,首先想到的是直接套用组合数公式然后高精度乘法+高精度除法。什么?高精除?貌似想切下一题了….
不慌,易知组合数一定是整数,所以我们可以约分。但是极端数据20000*20000,如果分子分母约分的话是 O(n2) O(n^2)的,会T。
于是我们分解质因数,那就要先筛素数。
把分子分解质因数之后,拿分母分解的质因数去约分。这里我用的根号的质因数分解,然后二分找到最后一个素数(画蛇添足)。
这样的话复杂度就很低了。
那位29ms的大佬是什么鬼...
代码
//组合数+高精
#include <cstdio>
#include <algorithm>
#define maxl 2000
#define maxn 50000
#define ya 100000000ll
#define ll long long
using namespace std;
struct bignum
{ll num[maxl], len;bignum(){for(ll i=0;i<maxl;i++)num[i]=0;len=0;}ll& operator[](ll x){return num[x];}void show(){printf("%lld",num[len]);for(ll i=len-1;i>0;i--){ll x=num[i];for(ll j=ya/10;j and num[i]<j;j/=10)putchar(48);printf("%lld",x);}}
}ans;
ll n, m, list[maxn], tmp[maxn] ,prime[maxn], q[maxn], mark[maxn], N, M;
inline void operator*=(bignum &a, ll b)
{ll i;for(i=1;i<=a.len;i++)a[i]*=b;for(i=1;i<=a.len;i++)a[i+1]+=a[i]/ya,a[i]%=ya;if(a[a.len+1])a.len++;
}
void shai()
{ll i, j;for(i=2;i<=N;i++){if(!mark[i])prime[++prime[0]]=i;for(j=1;j<=prime[0] and i*prime[j]<N;j++){mark[i*prime[j]]=1;if(i%prime[j]==0)break;}}
}
void resolve(ll x, ll d)
{ll i, l, r, mid;for(i=1;prime[i]*prime[i]<=x;i++)for(;x%prime[i]==0;x/=prime[i])q[i]+=d;if(x==1)return;for(l=i,r=prime[0],mid=(l+r+1)>>1;l<r;mid=(l+r+1)>>1){if(prime[mid]>x)r=mid-1;else l=mid;}q[l]+=d;
}
int main()
{ll i, j, t;scanf("%lld%lld",&n,&m);N=n+m-2, M=min(n-1,m-1);shai();for(i=N-M+1;i<=N;i++)resolve(i,1);for(i=1;i<=M;i++)resolve(i,-1);ans.len=ans[1]=1;for(i=1;i<=prime[0];i++){for(j=1,t=1;j<=q[i];j++){if(t*prime[i]>ya){ans*=t;t=1;}else t*=prime[i];}if(t>1)ans*=t;}ans.show();return 0;
}
CodeVS2505 上学路线相关推荐
- codevs2693 上学路线(施工)
难度等级:黄金 2693 上学路线(施工) 题目描述 Description 问题描述 你所在的城市街道好像一个棋盘,有a条南北方向的街道和b条东西方向的街道. 南北方向a条街道从西到东依次编号为1到 ...
- 1266: [AHOI2006]上学路线route
1266: [AHOI2006]上学路线route Description 可可和卡卡家住合肥市的东郊,每天上学他们都要转车多次才能到达市区西端的学校.直到有一天他们两人参加了学校的信息学奥林匹克竞赛 ...
- bzoj1266【AHOI2006】上学路线route
1266: [AHOI2006]上学路线route Time Limit: 3 Sec Memory Limit: 162 MB Submit: 1602 Solved: 559 [ Subm ...
- Codevs 2505 上学路线 (组合数学)
2505 上学路线 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 钻石 Diamond 题目描述 Description 因为是学生,所以显然小A每天都要上学.小A所在的城市的道路构 ...
- 上学路线 (Standard IO)
题意/Description: 你所在城市的街道好像一个棋盘,有a条南北方向的街道,和b条东西方向的街道. 南北方向的a条街道从西到东依次编号为1到a,而东西方向的b条街道从南到北依次编 ...
- 洛谷 P4300 BZOJ 1266 [AHOI2006]上学路线route
题目描述 可可和卡卡家住合肥市的东郊,每天上学他们都要转车多次才能到达市区西端的学校.直到有一天他们两人参加了学校的信息学奥林匹克竞赛小组才发现每天上学的乘车路线不一定是最优的. 可可:"很 ...
- BZOJ 1266: [AHOI2006]上学路线route
Description 可可和卡卡家住合肥市的东郊,每天上学他们都要转车多次才能到达市区西端的学校.直到有一天他们两人参加了学校的信息学奥林匹克竞赛小组才发现每天上学的乘车路线不一定是最优的. 可可: ...
- BZOJ 1266: [AHOI2006]上学路线route Floyd算法,网络最小割
Description 可可和卡卡家住合肥市的东郊,每天上学他们都要转车多次才能到达市区西端的学校.直到有一天他们两人参加了学校的信息学奥林匹克竞赛小组才发现每天上学的乘车路线不一定是最优的. 可可: ...
- BZOJ3782 上学路线 【dp + Lucas + CRT】
题目链接 BZOJ3782 题解 我们把终点也加入障碍点中,将点排序,令\(f[i]\)表示从\((0,0)\)出发,不经过其它障碍,直接到达\((x_i,y_i)\)的方案数 首先我们有个大致的方案 ...
最新文章
- 打开python的步骤_python RE 常见的打开方法
- 在读博士的第八年,她破解了量子计算领域最基本的问题之一
- pycharm中显示额外的“figure”窗口
- JavaScript实现递归楼梯问题(动态规划解决方案)算法(附完整源码)
- 大数据学习(5)-- NoSQL数据库
- MySQL主从复制的原理及配置方法(比较详细)
- plsqldevelop破解方法
- 【STM32】 ESP8266WIFI模块
- java文件如何打包_java文件如何打包?
- 2018年的第一把火:直播问答的后博弈时代如何演进?
- ONF组织的SDN架构文档——概述(一)
- 川藏北线-成都老茶馆叹茶
- 超灵敏磁传感解决方案助力汽车产业发展
- 下面哪种不是java语言的注释写法_下列哪项不是Java语言中所规定的注释样式?()...
- VS2017/c语言-求积分算法
- 联想电脑安装深度linux,联想笔记本电脑安装Deepin V20使用大黄蜂方案的心得
- URL请求后台获取不到特殊字符的参数
- SQL错误:违反唯一约束条件
- 高频电子之EMC电磁兼容
- 各类语言的常用正则表达式