1. 方程

    ★☆ 输入文件:equationz.in 输出文件:equationz.out 简单对比

    时间限制:1 s 内存限制:128 MB

    【题目描述】

    hyc 碰到了一个难题,请你来帮忙解决。

    对于不定方程a1+a2+a3+……+ak=g(x) ,其中K.>=2,k是正整数 , x 是正整数

    g(x)=x^x mod 1000 , x,k 是给定的数 . 我们要求的是这个不定方程的正整数解组数 .

    举例来说 , 当 k=3,x=2 时 ,g(x)=4, 原方程即 A1+A2+A3=4 .

    这个方程的正整数解有 3 组 . 分别为 (A1,A2,A3) = (2,1,1),(1,2,1),(1,1,2).

    【输入文件】

    有且只有一行 . 为用空格隔开的两个正整数 , 依次为 k,x.

    【输出文件】

    有且只有一行 , 为方程的正整数解组数 .

    【样例输入】

    3 2

    【样例输出】

    3

    【数据范围】

    对于 40% 的数据 , ans<= 10^16 ;

    对于 100% 的数据 , k<=100 , x<= 2^31-1 ,k<=g(x)。
  1. /*
  2. 求不定方程正整数解的个数.
  3. 隔板法求得ans=C(m-1,n-1) (m=pow(x,x)%1000).
  4. 然后是恶心的高精度.....
  5. */
  6. #include<iostream>
  7. #include<cstdio>
  8. #include<cstring>
  9. #define LL long long
  10. #define mod 1000
  11. #define MAXN 1001
  12. using namespace std;
  13. int n,x,m,f[MAXN][MAXN*10],tmp1[MAXN],a[MAXN*10],tmp[MAXN*10],tmpc[MAXN*10],tot;
  14. int read()
  15. {
  16. LL x=0,f=1;char ch=getchar();
  17. while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
  18. while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
  19. return x*f;
  20. }
  21. LL mi(LL a,LL b)
  22. {
  23. LL total=1;
  24. while(b)
  25. {
  26. if(b&1) total=total*a%mod;
  27. a=a*a%mod;
  28. b>>=1;
  29. }
  30. return total;
  31. }
  32. void slove1(int x)
  33. {
  34. tot=0;
  35. while(x) tmp[++tot]=x%10,x/=10;tmp[0]=tot;return ;
  36. }
  37. void add(int c[],int a[],int b[])
  38. {
  39. c[0]=a[0]+b[0];
  40. for(int i=1;i<=a[0];i++)
  41. {
  42. int x=0;
  43. for(int j=1;j<=b[0];j++)
  44. {
  45. c[i+j-1]+=a[i]*b[j];
  46. c[i+j]+=c[i+j-1]/10;
  47. x=c[i+j-1]/10;
  48. c[i+j-1]%=10;
  49. }
  50. c[i+b[0]]=x;
  51. }
  52. if(c[c[0]+1]) c[0]++;
  53. while(!c[c[0]]&&c[0]>1) c[0]--;return ;
  54. }
  55. bool cmp(int a[],int b[])
  56. {
  57. if(a[0]>b[0]) return true;
  58. if(a[0]<b[0]) return false;
  59. for(int i=a[0];i>=1;i--)
  60. {
  61. if(a[i]>b[i]) return true;
  62. if(a[i]<b[i]) return false;
  63. }
  64. return true;
  65. }
  66. void jian(int a[],int b[])
  67. {
  68. for(int i=1;i<=b[0];i++)
  69. {
  70. if(a[i]<b[i]) a[i]+=10,a[i+1]--;
  71. a[i]-=b[i];
  72. }
  73. while(!a[a[0]]&&a[0]>1) a[0]--;
  74. return ;
  75. }
  76. void chu(int c[],int a[],int b[])
  77. {
  78. c[0]=a[0]-b[0]+1;
  79. for(int i=c[0];i>=1;i--)
  80. {
  81. memset(tmpc,0,sizeof tmpc);
  82. for(int j=1;j<=b[0];j++) tmpc[i+j-1]=b[j];
  83. tmpc[0]=b[0]+i-1;
  84. while(cmp(a,tmpc))
  85. c[i]++,jian(a,tmpc);
  86. }
  87. while(!c[c[0]]&&c[0]>1) c[0]--;
  88. return;
  89. }
  90. void slove()
  91. {
  92. f[0][0]=1;f[0][1]=1;
  93. for(int i=1;i<=n;i++)
  94. {
  95. slove1(m-i+1);
  96. add(f[i],tmp,f[i-1]);
  97. slove1(i);
  98. memset(tmp1,0,sizeof tmp1);
  99. chu(tmp1,f[i],tmp);
  100. for(int j=0;j<=tmp1[0];j++) f[i][j]=tmp1[j];
  101. }
  102. for(int i=f[n][0];i>=1;i--) printf("%d",f[n][i]);
  103. }
  104. int main()
  105. {
  106. freopen("equationz.in","r",stdin);
  107. freopen("equationz.out","w",stdout);
  108. n=read(),x=read();
  109. m=mi(x,x);m--,n--;
  110. slove();
  111. return 0;
  112. }

Cogs 604.方程(排列组合+高精度)的更多相关文章

  1. 蓝桥杯 问题 1110: 2^k进制数 (排列组合+高精度巧妙处理)

    题目链接 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为2 ...

  2. BZOJ 2729: [HNOI2012]排队 排列组合 + 高精度

    Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不 ...

  3. codevs 1994 排队 排列组合+高精度

    /* 数学题0.0 最后答案:A(n,n)*A(n+1,2)*A(n+3,m)+A(n,n)*C(m,1)*A(2,2)*C(n+1,1)*A(n+2,m-1); 简单解释一下 +之前的很显然 先排男 ...

  4. 【noi 2.6_9288】&【hdu 1133】Buy the Ticket(DP / 排列组合 Catalan+高精度除法)

    题意:有m个人有一张50元的纸币,n个人有一张100元的纸币.他们要在一个原始存金为0元的售票处买一张50元的票,问一共有几种方案数. 解法:(学习了他人的推导后~) 1.Catalan数的应用7的变 ...

  5. 【COGS】2287:[HZOI 2015]疯狂的机器人 FFT+卡特兰数+排列组合

    [题意][COGS 2287][HZOI 2015]疯狂的机器人 [算法]FFT+卡特兰数+排列组合 [题解]先考虑一维的情况,支持+1和-1,前缀和不能为负数,就是卡特兰数的形式. 设C(n)表示第 ...

  6. Day2:T3DP(基于排列组合思想)

    T3:DP(基于排列组合思想的状态转移) 其实之前写排列组合的题目有一种很茫然的感觉.... 应该是因为之前没有刷过所以没有什么体会 上次刷的vj1060有用到,但是写状态转移还是第一次学习吧 ccy ...

  7. ACM~排列组合&amp;&amp;hdu例子

    排列组合是数学中的一个分支.在计算机编程方面也有非常多的应用,主要有排列公式和组合公式.错排公式.母函数.Catalan Number(卡特兰数)等. 一.有关组合数学的公式 1.排列公式   P(n ...

  8. [BZOJ1005]Prufer数列+排列组合

    一棵树的Prufer数列 每次在剩下的树中找到标号最小的叶子节点(对于无根树而言即是度数为1的节点),删去. 同时将其父节点(即与其相连的唯一点)加入Prufer数列当中. 一个Prufer数列所对应 ...

  9. BZOJ 1005 [HNOI2008]明明的烦恼 purfer序列,排列组合

    1005: [HNOI2008]明明的烦恼 Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少 ...

随机推荐

  1. LC 94. Binary Tree Inorder Traversal

    问题描述 Given a binary tree, return the inorder traversal of its nodes' values. (左 - 根 - 右) Example: In ...

  2. zookeeper集群搭建与升级

    zookeeper 1.zookeeper功能 1-1.配置管理 集中管理配置文件实现服务治理 1-2.命名服务 如为了通过网络访问一个系统,我们得知道对方的IP地址,但是IP地址对人非常不友好,这个 ...

  3. Ubuntu12.04 root登陆方法【保证有效】

    su -取得root权限后,gedit /etc/lightdm/lightdm.conf ,里面的内容全部改为 [SeatDefaults] greeter-session=unity-greete ...

  4. springcloud必知功能使用教程

    springcloud Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总线.负载均衡.断路 ...

  5. vue组件之间的传值

    vue中组件之间的传值有好几种情况 1.父向子传值 父组件向子组件传值使用props,直接上实例 city.vue是父组件,list.vue是子组件city.vue里定义cities和hotCitie ...

  6. vue统一注册组件

    文件夹下面组件数量较多,如果每一个组件先import然后在 components,虽然灭有问题,但是会导致代码量大,而且不直观 解决办法: 将图元组件进行统一注册 新建一个pixels文件,文件里面的 ...

  7. 简单SQL注入试探、一

    DVWA——简单SQL注入小记 前不久刚开始接触SQL注入,今天来记录一些最近的一些收获和一些SQL注入方面的知识. 主要是基于DVWA这个开源的平台来进行练习. 废话不多说开始解题. 从简单的SQL ...

  8. Mac下安装Redis及Redis Desktop Manager

    1.简介 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表 ...

  9. 【1】Git基础

    一.Git概念 1.1.Git定义   Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发 ...

  10. CDH5.16.1的kafka集群报错: No broker in ISR for partition [getngo_collect_apm_test,0]

    1 详细错误 kafka.common.NoReplicaOnlineException: No broker in ISR for partition [getngo_collect_apm_tes ...