题意:

给出一个长度为n的数列p,数列中数字两两互质;

有一个无限长的寄存器,现从p[1]开始,依次将其所有的倍数在寄存器中置为p[i];

求最后每个数字所染色区域在寄存器中占比,用一个既约分数表示;

n<=1000,p[i]<=maxint;

题解:

这傻逼题我居然傻逼了一晚上;

说白了就是一个递推,f[i]=1/p[i] *Π(p[j]-1)/p[j];

这坨东西多好推啊,要是这题输出浮点数多好;

然并卵,显然这东西乘个n次早就爆long long了;

于是要上高精度;

上高精度可不容易,这就要考虑考虑这个式子怎么求方便了;

显然Π(p[i]-1)/p[i]可以通过后缀积来搞搞,由最后面推过来;

每次只要分子分母同乘低精度就好;

而最后的f[i]也就是分母乘个p[i]的事;

然而并不能直接输出,因为题中要的是既约分数。。。

高精GCD+高精除高精?

开玩笑吧!我还能有那码力?

首先一个显然的事,如果a与c互质,b与c互质,那么a*b与c互质;

然后我们只需要将每次低精乘高精之前,对另一个高精求一下GCD;

然后低精与另一个高精除掉这个GCD,就依然保持分数为既约形式;

这样只需要低精与高精的GCD,和高精除低精了;

高精除低精不用说,况且还是保证整除;

GCD这我就逗了,被坑的去写了一个除二讨论的GCD;

这特么。。我居然以为高精度的log很小。。。

总复杂度O(n^2log(高精度))=O(n^3)四舍五入就是一个亿啊!

真是被逗的不轻,然后我就写了个√n的质因数分解。。

只要每次分出的质因数去判断高精度能不能除掉就好了;

直接加起来边模边算,反正都是同余系下;

然后这题就结束了,复杂度O(n^2√n);

代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 2100
#define M 1100
#define mod 10000
using namespace std;
typedef long long ll;
struct BIG
{int a[N],top;void print(){int i=top;printf("%d",a[i--]);while(i>=0)printf("%04d",a[i--]);}bool judge(int p){int ret=0;for(int i=top;i>=0;i--){ret=(ret*mod%p+a[i])%p;}return !ret;}friend bool operator ==(BIG &a,BIG &b){memcpy(a.a,b.a,sizeof(int)*(b.top+1));a.top=b.top;}friend bool operator <(BIG &a,int b){if(a.top>=3) return 0;if(a.top==2)return (ll)a.a[2]*mod*mod+a.a[1]*mod+a.a[0]<b;if(a.top==1)return a.a[1]*mod+a.a[0]<b;if(a.top==0)return a.a[0]<b;}friend void operator -=(BIG &a,int b){a.a[2]-=b/mod/mod;a.a[1]-=b/mod%mod;a.a[0]-=b%mod;while(a.a[a.top]==0&&a.top)a.top--;}friend void operator *=(BIG &b,int a){static int i;ll index,up;for(i=0,up=0;i<=b.top;i++){index=up+(ll)a*b.a[i];b.a[i]=index%mod;up=index/mod;}while(up)b.a[++b.top]=up%mod,up=up/mod;}friend void operator /=(BIG &a,int b){static int i,up;static ll index;i=a.top,up=0;while(i>=0){index=(ll)up*mod+a.a[i];a.a[i]=index/b;up=index%b;i--;}while(a.a[a.top]==0&&a.top)a.top--;}friend int gcd(int a,BIG &b){static BIG temp;memcpy(temp.a,b.a,sizeof(int)*(b.top+1));temp.top=b.top;int ret=1;for(int i=2;i*i<=a;i++){if(a%i==0){while(a%i==0&&temp.judge(i)){a/=i;temp/=i;ret*=i;}while(a%i==0)a/=i;}}if(a!=1)if(temp.judge(a))ret*=a;return ret;}
}up[1100],down[1100];
int p[1100];
int main()
{int n,m,i,j,k;scanf("%d",&n);for(i=1;i<=n;i++)scanf("%d",p+i);up[n+1].a[0]=down[n+1].a[0]=1;for(i=n;i>1;i--){up[i]==up[i+1];down[i]==down[i+1];if(p[i]-1==0){memset(up[i].a,0,sizeof(int)*(up[i].top+1));memset(down[i].a,0,sizeof(int)*(down[i].top+1));up[i].top=0;down[i].top=0;down[i].a[0]=1;}else{k=gcd(p[i]-1,down[i+1]);down[i]/=k;up[i]*=(p[i]-1)/k;}k=gcd(p[i],up[i]);up[i]/=k;down[i]*=p[i]/k;}for(i=2;i<=n+1;i++){k=gcd(p[i-1],up[i]);up[i]/=k;down[i]*=p[i-1]/k;}for(i=2;i<=n+1;i++){up[i].print();putchar('/');down[i].print();putchar('\n');}return 0;
}

bzoj-1128 Lam相关推荐

  1. BZOJ 1128 [POI2008]Lam 高精度

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

  2. BZOJ.1558.[JSOI2009]等差数列(线段树 差分)

    BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...

  3. S-T平面图中利用最短路求最小割(BZOJ 1001)

    BZOJ 1001: [BeiJing2006]狼抓兔子 最小割 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢 ...

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

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

  5. BZOJ 2957楼房重建

    传送门 线段树 //Twenty #include<cstdio> #include<cstdlib> #include<iostream> #include< ...

  6. BZOJ.5249.[九省联考2018]iiidx(贪心 线段树)

    BZOJ LOJ 洛谷 \(d_i\)不同就不用说了,建出树来\(DFS\)一遍. 对于\(d_i\)不同的情况: Solution 1: xxy tql! 考虑如何把这些数依次填到树里. 首先对于已 ...

  7. bzoj 4871: [Shoi2017]摧毁“树状图”

    4871: [Shoi2017]摧毁"树状图" Time Limit: 25 Sec  Memory Limit: 512 MB Submit: 53  Solved: 9 [Su ...

  8. Python 开源项目 Top 10 精选(平均star为1128)

    翻译 | SuiSui 最近,Mybridge对250个Python开源项目进行了排名,从中精选出了Top 10.这些开源项目平均star为1128,内容包括Python新利器Pipenv, 自组织映 ...

  9. BZOJ 1592. Making the Grade(思维,数据结构优化DP,以及三个拓展问题)[Usaco2008 Feb]【BZOJ计划】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 BZOJ简单题合集x 目录 BZOJ 1592. Making the Grade 拓展问题一 拓展问 ...

  10. BZOJ 1590.Secret Message 秘密信息(Trie树) [Usaco2008 Dec]【BZOJ计划】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 BZOJ简单题合集x Weblink https://hydro.ac/d/bzoj/p/1590 P ...

最新文章

  1. 逆战服务器在哪个文件夹,逆战的背景音乐文件夹放在哪?别说在服务器上面!...
  2. backup(full,diff,log)备份并清理过时备份
  3. 大规模数据处理的演化历程(2003-2018)
  4. spring.net nhibernate 分布布式事务(下)
  5. Redis Cluster 集群模式原理和动态扩容
  6. Android 屏幕尺寸知识
  7. YBTOJ:最短时间(长链剖分、线段树)
  8. vue-axios interceptors
  9. MySQl Modify JSON Values
  10. 将文件标记为 side-effect-free(无副作用)
  11. 华为又对这一领域下手了,网友:太难了……
  12. python dlib gpu ubuntu conda_Ubuntu 下编译支持 GPU 的 TensorFlow 和 Dlib
  13. html中radio实现互斥
  14. C# 使用VS建立数据库并使用
  15. mybatis sql 按照特定的字段顺序排序,按照拼音首字母排序
  16. 永恒python配合什么主武器_「和平精英武器组合」游戏的主副武器应该怎么搭配?这三种配合让你战斗力提升...
  17. 用大白话谈谈XSS与CSRF
  18. 网络通信优化之通信协议:如何优化RPC网络通信?
  19. 网狐精华版后台修改记录
  20. hibernate报错could not insert

热门文章

  1. python 好玩_好用好玩的Python包
  2. 五个有用的微信公众号运营技巧!
  3. nodejs全局变量设置设置
  4. Oracle企业版、标准版及其他版本的异同
  5. 在Shell里面判断字符串是否为空
  6. 上白泽慧音 - C++
  7. 计算机网络技术 李晓峰,计算机网络技术3(吉林大学李晓峰).ppt
  8. 家用云服务器配置,如何选择合适的云服务器配置?
  9. 虚拟机与主机互传文件方法分享
  10. Matlab瀑布图(阶梯图)