BZOJ 1128 [POI2008]Lam 高精度
题意:链接
方法:高精度
解析:
N<=1000,P<=10^9
首先因为所有数都互质。
并且后来者可以覆盖。
所以倒着搞
拿样例来说
5->1/5
3->1/5 * 4/3
2->4/15 * 2/2
所以Ai=Ai+1∗pi+1−1piA_i=A_{i+1}*\frac{p_{i+1}-1}{p_i}
然后因为数据范围问题,所以需要上高精。
高精除gcd的时候,千万别傻不啦叽写高精对高精那种除2流的GCD,别以为这是log(n)
这特么是log(10^1000)
直接变成O(n^3),想过?没门。
所以转化成高精对低精的gcd就好。
也就是说我们写个高精模低精就可以了。
代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 1100
#define M 1000000000
using namespace std;
typedef long long ll;
int n;struct node
{ll num[1010];int len;
}ans[N][2];
node dec(node &a,node &b)
{node ret;memset(ret.num,0,sizeof(ret.num));int len=a.len;for(int i=1;i<=len;i++){ret.num[i]+=a.num[i]-b.num[i];if(ret.num[i]<0){ret.num[i]+=M;ret.num[i+1]--;}}while(ret.num[len]==0&&len>1)len--;ret.len=len;return ret;
}
node mul(node &a,ll x)
{if(x==1)return a;node ret;memset(ret.num,0,sizeof(ret.num));int len=a.len;for(int i=1;i<=len;i++){ret.num[i]+=a.num[i]*x;ret.num[i+1]+=ret.num[i]/M;ret.num[i]%=M;}while(ret.num[len+1]){len++;ret.num[len+1]+=ret.num[len]/M;ret.num[len]%=M;}ret.len=len;return ret;
}
void div(node &a,ll x)
{if(x==1)return;int len=a.len;ll lll=0;for(int i=len;i>=1;i--){lll=lll*M+a.num[i];a.num[i]=lll/x;lll=lll%x;}while(a.num[len]==0&&len>1)len--;a.len=len;
}
bool cmp(node &a,node &b)
{if(a.len>b.len)return 1;else if(a.len<b.len)return 0;else{int len=a.len;while(len){if(a.num[len]>b.num[len])return 1;else if(a.num[len]<b.num[len])return 0;len--;}return 1;}
}
ll get_yu(node &a,ll b)
{ll lll=0;int len=a.len;for(int i=len;i>=1;i--){lll=lll*M+a.num[i];a.num[i]=lll/b;lll=lll%b;}return lll;
}
ll gcd(ll a,ll b)
{while(b){ll t=b;b=a%b;a=t;}return a;
}
ll gcd(node a,ll b)
{return gcd(b,get_yu(a,b));
}
ll p[N],pp[N];
void print(node &a,node &b)
{printf("%lld",a.num[a.len]);for(int i=a.len-1;i>=1;i--)printf("%09lld",a.num[i]);printf("/");printf("%lld",b.num[b.len]);for(int i=b.len-1;i>=1;i--)printf("%09lld",b.num[i]);puts("");
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%lld",&p[i]),pp[i]=p[i]-1;ans[n][0].num[1]=1,ans[n][0].len=1;ans[n][1].num[1]=p[n],ans[n][1].len=1;if(ans[n][1].num[1]==M)ans[n][1].num[1]=0,ans[n][1].num[2]=1,ans[n][1].len++;int flag=0;if(p[n]==1)flag=1;for(int i=n-1;i>=1;i--){if(flag){ans[i][0].len=ans[i][1].len=ans[i][1].num[1]=1;continue;}ll tmp3=gcd(p[i],pp[i+1]);ll tmp1=gcd(ans[i+1][0],p[i]/tmp3),tmp2=gcd(ans[i+1][1],pp[i+1]/tmp3);ans[i][0]=mul(ans[i+1][0],pp[i+1]/(tmp2*tmp3)),ans[i][1]=mul(ans[i+1][1],p[i]/(tmp1*tmp3));div(ans[i][0],tmp1),div(ans[i][1],tmp2);if(p[i]==1)flag=1;}for(int i=1;i<=n;i++){print(ans[i][0],ans[i][1]);}
}
BZOJ 1128 [POI2008]Lam 高精度相关推荐
- BZOJ 1124: [POI2008]枪战Maf(构造 + 贪心)
题意 有 \(n\) 个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪. 因此,对于不同的开枪顺序,最后死的人也不同. 问最 ...
- [BZOJ 1112] [POI2008] 砖块Klo 【区间K大】
题目链接:BZOJ - 1112 题目分析 枚举每一个长度为k的连续区间,求出这个区间的最优答案,更新全局答案. 可以发现,这个区间的所有柱子最终都变成这k个数的中位数时最优,那么我们就需要查询这个区 ...
- BZOJ 3907: 网格( 组合数 + 高精度 )
(0,0)->(n,m)方案数为C(n,n+m), 然后减去不合法的方案. 作(n,m)关于y=x+1的对称点(m-1,n+1), 则(0,0)->(m-1,n+1)的任意一条路径都对应( ...
- bzoj 1124 [POI2008]枪战Maf 贪心
[POI2008]枪战Maf Time Limit: 10 Sec Memory Limit: 162 MB Submit: 741 Solved: 295 [Submit][Status][Di ...
- BZOJ 1113: [Poi2008]海报PLA
1113: [Poi2008]海报PLA Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1025 Solved: 679 [Submit][Sta ...
- bzoj 1116: [POI2008]CLO(并查集)
1116: [POI2008]CLO Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1180 Solved: 649 [Submit][Statu ...
- bzoj 1113: [Poi2008]海报PLA(栈)
1113: [Poi2008]海报PLA Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1272 Solved: 870 [Submit][Sta ...
- bzoj 1124: [POI2008]枪战Maf(贪心)
1124: [POI2008]枪战Maf Time Limit: 10 Sec Memory Limit: 162 MB Submit: 713 Solved: 278 [Submit][Stat ...
- bzoj 1121: [POI2008]激光发射器SZK
1121: [POI2008]激光发射器SZK Time Limit: 10 Sec Memory Limit: 162 MB Submit: 951 Solved: 791 [Submit][S ...
最新文章
- 数组的有关属性和方法
- excel随机排序,在A列产生顺序号
- Fact Table and Dimension Table In My Opinion
- 史上最全ClassLoader总结
- plc编程技术发展历程
- matlab互相关函数并画图,自相关函数和互相关函数的matlab计算和作图
- MVC+easyui-datagrid之查看详情
- linux使用光盘镜像(ISO)作为软件源安装软件
- 欧美游戏业者都挣多少钱
- 对微信卖小电影的一次内网漫游
- matlab中尖号,在Matlab中函數中的一個尖角消除掉
- 为什么社交APP已经这么多了,他们还要耗巨资做
- Web自动化之Pytest测试框架
- 较新版本的git安装教程
- Jupyter Notebook 自动补全、智能提示
- 计算机机房主机有哪些功能,机房监控主机有哪些?
- vue dev环境API代理实现
- geekbench5 cpu排名 202009
- 【Mongodb和Solr】Mongodb和solr整合
- 计算机f g 盘找不到了,电脑E/F盘符突然不见了怎么办
热门文章
- ca证书 csr_SSL证书请求文件(CSR)生成指南
- 计算机共享输入命令是什么意思,在命令提示符下输入net view是什么意思?有什么作用?...
- js 获取图片原始宽高并等比例缩放
- 如何防止数据泄密和丢失?22项安全策略,守护企业数据安全
- Codeforces」 Round #782 (Div. 2) A —D
- 刘帅西安电子计算机,2014年陕西自主招生选拔资格考生名单(12)
- 计算机科学导论第六章计算机网路 学习笔记+习题答案
- html5微信拍照后自动刷新,html5 调用微信jssdk 没有调用相机,只显示最近的图片文件。...
- Java与报表知识概括
- JSP开发自定义公告栏