题目大意:有一个无限长的序列,现在给你n个数,p1~pn,要求第i次把所有pi的倍数染成i这种颜色,问最后每种颜色占总长度的几分之几。保证pi两两互质

一个显然的做法:由于pi两两互质,所以我们可以从后向前扫,令tmp[i]=tmp[i+1]*(p[i]-1)/p[i],则ans[i]=tmp[i+1]/p[i]

显然鉴于p[i]和n的大小,直接做肯定是要爆longlong的

而直接上高精度约分时间复杂度接受不了

所以当我们想求(a/b)*(C/D)时,其中C,D为高精度数并且已经约分完毕,a,b是低精度数

则我们可以让a和D约分,b和C约分,这样就转化成了高精度与低精度取gcd了

时间复杂度也就得到了保证

注意当答案为0的时候要输出"0/1"

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 1010
#define M 1000000000
using namespace std;
struct ppp
{long long a[4010],clong;void jinwei(){int i;for(i=1;i<clong;i++){a[i+1]+=a[i]/M;a[i]%=M;}while(a[clong]>=M){clong++;a[clong]=a[clong-1]/M;a[clong-1]%=M;}while(a[clong]==0&&clong>1) clong--;}void print(){int i;printf("%d",a[clong]);for(i=clong-1;i>=1;i--)printf("%09d",a[i]);}
};
void make(ppp &x,int y)
{x.clong=1;x.a[1]=y;
}
int operator %(const ppp &x,int y)
{long long ret=0;int i;for(i=x.clong;i>=1;i--)ret=(ret*M+x.a[i])%y;return (int)ret;
}
ppp ret;
ppp operator *(const ppp &x,int y)
{int i;for(i=1;i<=ret.clong;i++)ret.a[i]=0;ret.clong=x.clong;for(i=1;i<=x.clong;i++)ret.a[i]=x.a[i]*y;ret.jinwei();return ret;
}
ppp operator /(const ppp &x,int y)
{int i;for(i=1;i<=ret.clong;i++)ret.a[i]=0;long long tmp=0;ret.clong=x.clong;for(i=x.clong;i>=1;i--){tmp=tmp*M+x.a[i];ret.a[i]=tmp/y;tmp%=y;}ret.jinwei();return ret;
}
int a[N];
ppp A[N],B[N];
ppp tmpa,tmpb;
int gcd(int a,int b)
{if(!a) return b;return gcd(b%a,a);
}
int gcd(int a,const ppp &b)
{int tmp=b%a;return gcd(a,tmp);
}
int main()
{int n;scanf("%d",&n);int i,j,x,y;for(i=1;i<=n;i++)scanf("%d",&a[i]);make(A[n],1);make(B[n],a[n]);make(tmpa,a[n]-1);make(tmpb,a[n]);int D=0;for(i=n-1;i>=1;i--){x=a[i]-1;y=a[i];int X,Y;if(x!=0){X=gcd(x,tmpb);Y=gcd(y,tmpa);x/=X;y/=Y;A[i]=tmpa/Y;B[i]=tmpb*y;tmpa=A[i]*x;tmpb=B[i]/X;}else{D=i-1;A[i]=tmpa;B[i]=tmpb;break;}}for(i=1;i<=D;i++)puts("0/1");for(i=D+1;i<=n;i++){A[i].print();printf("/");B[i].print();puts("");}
}

BZOJ1128: [POI2008]Lam相关推荐

  1. BZOJ 1128 [POI2008]Lam 高精度

    题意:链接 方法:高精度 解析: N<=1000,P<=10^9 首先因为所有数都互质. 并且后来者可以覆盖. 所以倒着搞 拿样例来说 5->1/5 3->1/5 * 4/3 ...

  2. bzoj-1128 Lam

    题意: 给出一个长度为n的数列p,数列中数字两两互质: 有一个无限长的寄存器,现从p[1]开始,依次将其所有的倍数在寄存器中置为p[i]: 求最后每个数字所染色区域在寄存器中占比,用一个既约分数表示: ...

  3. bzoj1131[POI2008]Sta*

    bzoj1131[POI2008]Sta 题意: 给出一个n个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大.n≤1000000. 题解: 两次dfs.第一次dfs维护子树的大小.节点 ...

  4. 洛谷 P3469 [POI2008]BLO-Blockade (Tarjan,割点)

    P3469 [POI2008]BLO-Blockade https://www.luogu.org/problem/P3469 题目描述 There are exactly nn towns in B ...

  5. [POI2008]STA-Station

    之前都看过有换根dp,一直不知道是啥意思,本来弱弱树形dp都不太熟悉,不过今天工数课的时候突然想看一下,写个板子题练练吧. 对于我的理解,换根的题目一般是根不确定,而求得答案与根是谁有关,而且通过暴力 ...

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

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

  7. BZOJ 1113: [Poi2008]海报PLA

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

  8. 【安全】通过LAM(ldap-account-manager)来管理OpenLDAP

    文章目录 1.安装 ldap-account-manager 1.1 启动Apache的www服务 1.2 访问 1.3 配置ldap-account-manager登录密码 1.4 添加要连接的主机 ...

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

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

最新文章

  1. EXCEL中SUMIF函数介绍
  2. http://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1895 二分
  3. Photoshop常用快捷键
  4. 企业主机安全面临的三大风险如何解?
  5. (王道408考研操作系统)第一章计算机系统概述-第一节4:中断和异常
  6. 13万张表+数亿行代码,迁移只需数小时,还是异构数据库
  7. 从source folder 下将其所有子文件夹的*.* 文件拷贝到 target folder (不拷贝文件夹名仅拷贝文件)...
  8. 【转】 谈谈C++中的swap函数
  9. 4599 的 iPhone 11,拼多多如何从「真香」到「更香」
  10. 第一次使用pyqt5解决的几个小问题
  11. mysql执行语句返回主键_mysql语句insert后返回主键
  12. 最佳牛围栏题解 二分答案
  13. mac 安装ffmpeg以及各种编码器
  14. 南昌大学超级计算机,南昌大学-理学院
  15. xilinx FPGA IOB约束使用以及注意事项
  16. 内角均为120度六边形面积求解(xdoj 1118)
  17. [转载]中国移动深度定制首推“0元购TD手机”补贴政策
  18. Josh 的学习笔记之数字通信(Part 4——带通调制和解调)
  19. SWUST OJ492: 荷兰国旗问题
  20. LeeCode1715. 苹果和橘子的个数

热门文章

  1. 关于.netFramework概述
  2. 日光観光は東照宮だけじゃない!日光観光のおすすめスポット29選
  3. 设计一个低电平VI转换器
  4. 8个常见机器学习算法的计算复杂度总结!
  5. 10进制数转换成16进制
  6. Android RxJava操作符的学习---变换操作符---网络请求嵌套回调
  7. 2019.8.1考试反思
  8. 广通远驰亮相2022 C-V2X“四跨”(苏州)应用示范活动
  9. zeplin加载 不出图片_为什么Zeplin不能解决您的所有问题
  10. 每日一个小技巧:如何去水印而不损图片?赶紧学起来