题意:链接

方法:高精度

解析:

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 高精度相关推荐

  1. BZOJ 1124: [POI2008]枪战Maf(构造 + 贪心)

    题意 有 \(n\) 个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪. 因此,对于不同的开枪顺序,最后死的人也不同. 问最 ...

  2. [BZOJ 1112] [POI2008] 砖块Klo 【区间K大】

    题目链接:BZOJ - 1112 题目分析 枚举每一个长度为k的连续区间,求出这个区间的最优答案,更新全局答案. 可以发现,这个区间的所有柱子最终都变成这k个数的中位数时最优,那么我们就需要查询这个区 ...

  3. 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)的任意一条路径都对应( ...

  4. bzoj 1124 [POI2008]枪战Maf 贪心

    [POI2008]枪战Maf Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 741  Solved: 295 [Submit][Status][Di ...

  5. BZOJ 1113: [Poi2008]海报PLA

    1113: [Poi2008]海报PLA Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1025  Solved: 679 [Submit][Sta ...

  6. bzoj 1116: [POI2008]CLO(并查集)

    1116: [POI2008]CLO Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1180  Solved: 649 [Submit][Statu ...

  7. bzoj 1113: [Poi2008]海报PLA(栈)

    1113: [Poi2008]海报PLA Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1272  Solved: 870 [Submit][Sta ...

  8. bzoj 1124: [POI2008]枪战Maf(贪心)

    1124: [POI2008]枪战Maf Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 713  Solved: 278 [Submit][Stat ...

  9. bzoj 1121: [POI2008]激光发射器SZK

    1121: [POI2008]激光发射器SZK Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 951  Solved: 791 [Submit][S ...

最新文章

  1. 数组的有关属性和方法
  2. excel随机排序,在A列产生顺序号
  3. Fact Table and Dimension Table In My Opinion
  4. 史上最全ClassLoader总结
  5. plc编程技术发展历程
  6. matlab互相关函数并画图,自相关函数和互相关函数的matlab计算和作图
  7. MVC+easyui-datagrid之查看详情
  8. linux使用光盘镜像(ISO)作为软件源安装软件
  9. 欧美游戏业者都挣多少钱
  10. 对微信卖小电影的一次内网漫游
  11. matlab中尖号,在Matlab中函數中的一個尖角消除掉
  12. 为什么社交APP已经这么多了,他们还要耗巨资做
  13. Web自动化之Pytest测试框架
  14. 较新版本的git安装教程
  15. Jupyter Notebook 自动补全、智能提示
  16. 计算机机房主机有哪些功能,机房监控主机有哪些?
  17. vue dev环境API代理实现
  18. geekbench5 cpu排名 202009
  19. 【Mongodb和Solr】Mongodb和solr整合
  20. 计算机f g 盘找不到了,电脑E/F盘符突然不见了怎么办

热门文章

  1. ca证书 csr_SSL证书请求文件(CSR)生成指南
  2. 计算机共享输入命令是什么意思,在命令提示符下输入net view是什么意思?有什么作用?...
  3. js 获取图片原始宽高并等比例缩放
  4. 如何防止数据泄密和丢失?22项安全策略,守护企业数据安全
  5. Codeforces」 Round #782 (Div. 2) A —D
  6. 刘帅西安电子计算机,2014年陕西自主招生选拔资格考生名单(12)
  7. 计算机科学导论第六章计算机网路 学习笔记+习题答案
  8. html5微信拍照后自动刷新,html5 调用微信jssdk 没有调用相机,只显示最近的图片文件。...
  9. Java与报表知识概括
  10. JSP开发自定义公告栏