Cogs 604.方程(排列组合+高精度)
- 方程
★☆ 输入文件: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)。
/*
求不定方程正整数解的个数.
隔板法求得ans=C(m-1,n-1) (m=pow(x,x)%1000).
然后是恶心的高精度.....
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define LL long long
#define mod 1000
#define MAXN 1001
using namespace std;
int n,x,m,f[MAXN][MAXN*10],tmp1[MAXN],a[MAXN*10],tmp[MAXN*10],tmpc[MAXN*10],tot;
int read()
{
LL x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
return x*f;
}
LL mi(LL a,LL b)
{
LL total=1;
while(b)
{
if(b&1) total=total*a%mod;
a=a*a%mod;
b>>=1;
}
return total;
}
void slove1(int x)
{
tot=0;
while(x) tmp[++tot]=x%10,x/=10;tmp[0]=tot;return ;
}
void add(int c[],int a[],int b[])
{
c[0]=a[0]+b[0];
for(int i=1;i<=a[0];i++)
{
int x=0;
for(int j=1;j<=b[0];j++)
{
c[i+j-1]+=a[i]*b[j];
c[i+j]+=c[i+j-1]/10;
x=c[i+j-1]/10;
c[i+j-1]%=10;
}
c[i+b[0]]=x;
}
if(c[c[0]+1]) c[0]++;
while(!c[c[0]]&&c[0]>1) c[0]--;return ;
}
bool cmp(int a[],int b[])
{
if(a[0]>b[0]) return true;
if(a[0]<b[0]) return false;
for(int i=a[0];i>=1;i--)
{
if(a[i]>b[i]) return true;
if(a[i]<b[i]) return false;
}
return true;
}
void jian(int a[],int b[])
{
for(int i=1;i<=b[0];i++)
{
if(a[i]<b[i]) a[i]+=10,a[i+1]--;
a[i]-=b[i];
}
while(!a[a[0]]&&a[0]>1) a[0]--;
return ;
}
void chu(int c[],int a[],int b[])
{
c[0]=a[0]-b[0]+1;
for(int i=c[0];i>=1;i--)
{
memset(tmpc,0,sizeof tmpc);
for(int j=1;j<=b[0];j++) tmpc[i+j-1]=b[j];
tmpc[0]=b[0]+i-1;
while(cmp(a,tmpc))
c[i]++,jian(a,tmpc);
}
while(!c[c[0]]&&c[0]>1) c[0]--;
return;
}
void slove()
{
f[0][0]=1;f[0][1]=1;
for(int i=1;i<=n;i++)
{
slove1(m-i+1);
add(f[i],tmp,f[i-1]);
slove1(i);
memset(tmp1,0,sizeof tmp1);
chu(tmp1,f[i],tmp);
for(int j=0;j<=tmp1[0];j++) f[i][j]=tmp1[j];
}
for(int i=f[n][0];i>=1;i--) printf("%d",f[n][i]);
}
int main()
{
freopen("equationz.in","r",stdin);
freopen("equationz.out","w",stdout);
n=read(),x=read();
m=mi(x,x);m--,n--;
slove();
return 0;
}
Cogs 604.方程(排列组合+高精度)的更多相关文章
- 蓝桥杯 问题 1110: 2^k进制数 (排列组合+高精度巧妙处理)
题目链接 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为2 ...
- BZOJ 2729: [HNOI2012]排队 排列组合 + 高精度
Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不 ...
- 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); 简单解释一下 +之前的很显然 先排男 ...
- 【noi 2.6_9288】&【hdu 1133】Buy the Ticket(DP / 排列组合 Catalan+高精度除法)
题意:有m个人有一张50元的纸币,n个人有一张100元的纸币.他们要在一个原始存金为0元的售票处买一张50元的票,问一共有几种方案数. 解法:(学习了他人的推导后~) 1.Catalan数的应用7的变 ...
- 【COGS】2287:[HZOI 2015]疯狂的机器人 FFT+卡特兰数+排列组合
[题意][COGS 2287][HZOI 2015]疯狂的机器人 [算法]FFT+卡特兰数+排列组合 [题解]先考虑一维的情况,支持+1和-1,前缀和不能为负数,就是卡特兰数的形式. 设C(n)表示第 ...
- Day2:T3DP(基于排列组合思想)
T3:DP(基于排列组合思想的状态转移) 其实之前写排列组合的题目有一种很茫然的感觉.... 应该是因为之前没有刷过所以没有什么体会 上次刷的vj1060有用到,但是写状态转移还是第一次学习吧 ccy ...
- ACM~排列组合&&hdu例子
排列组合是数学中的一个分支.在计算机编程方面也有非常多的应用,主要有排列公式和组合公式.错排公式.母函数.Catalan Number(卡特兰数)等. 一.有关组合数学的公式 1.排列公式 P(n ...
- [BZOJ1005]Prufer数列+排列组合
一棵树的Prufer数列 每次在剩下的树中找到标号最小的叶子节点(对于无根树而言即是度数为1的节点),删去. 同时将其父节点(即与其相连的唯一点)加入Prufer数列当中. 一个Prufer数列所对应 ...
- BZOJ 1005 [HNOI2008]明明的烦恼 purfer序列,排列组合
1005: [HNOI2008]明明的烦恼 Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少 ...
随机推荐
- mysql数据库的 varchar 和 char 的区别
char是存储字符(无论字母还是汉字都最多存255个) char(20)表示这个字段最多存20个字符 如果存了16个字符 那么也会占用20个字符的空间 varchar是存储字节(1个字母1个字节 ...
- scrapy 框架持久化存储的三个方法 存入 mysql 文件 redis
这里就不做详细讲解了 毕竟不是一句两句能说的清楚,所以我把代码和注释放到了这里 谢谢! import pymysql from redis import Redis # 写入mysql class W ...
- spark调优篇-数据倾斜(汇总)
数据倾斜 为什么会数据倾斜 spark 中的数据倾斜并不是说原始数据存在倾斜,原始数据都是一个一个的 block,大小都一样,不存在数据倾斜: 而是指 shuffle 过程中产生的数据倾斜,由于不同的 ...
- springMvc 框架
第一步:发起请求到前端控制器(DispatcherServlet) 第二步:前端控制器请求HandlerMapping查找 Handler 可以根据xml配置.注解进行查找 第三步:处理器映射器Han ...
- Attribute自定义特性+Asp.net MVC中的filter详解
转载自:http://blog.csdn.net/wangyy130/article/details/44241957 一.filter简介 在了解自定义特性前,先引入一个概念filter,它是MVC ...
- Nopcommerce 项目添加插件
插件是用来扩展nopCommerce功能的.nopCommerce拥有多种类型的插件.例如:支付方式(PayPal),税务机构,送货方式计算方法(UPS, USP, FedEx),小部件(如“在线聊天 ...
- [NOIP10.5模拟赛]3.c题解--思维
题目链接 这次不咕了 https://www.luogu.org/problemnew/show/AT2389 闲扯 考场20分爆搜走人 \cy 话说这几天T3都很考验思维啊 分析 我们先钦定一只鸡( ...
- 如何使用Marketing Cloud的扩展字段作为搜索条件进行搜索
需求:我在Marketing Cloud的contact模型上用custom field这个应用创建了一个Extension field,名称为微信ID. 现在客户的需求是使用这个字段作为过滤条件进行 ...
- SpringBoot之Redis访问(spring-boot-starter-data-redis)
依赖注入: <!--dependency for redis--> <!-- https://mvnrepository.com/artifact/org.springframewo ...
- Spring Data JPA 大纲归纳
第一天: springdatajpa day1:orm思想和hibernate以及jpa的概述和jpa的基本操作 day2:springdatajpa的运行原理以及基本操作 day3:多表操作,复杂查 ...