洛谷P1771 方程的解_NOI导刊2010提高(01)
题目描述
佳佳碰到了一个难题,请你来帮忙解决。
对于不定方程a1+a2+…+ak-1+ak=g(x),其中k≥2且k∈N,x是正整数,g(x)=x^x mod 1000(即x^x除以1000的余数),x,k是给定的数。我们要求的是这个不定方程的正整数解组数。
举例来说,当k=3,x=2时,分别为(a1,a2,a3)=(2,1,1)'(1,2,1),(1,1,2)。
输入输出格式
输入格式:
输入文件equation.in有且只有一行,为用空格隔开的两个正整数,依次为k,x。
输出格式:
输出文件equation.out有且只有一行,为方程的正整数解组数。
输入输出样例
3 2
3
说明
对于40%的数据,ans≤10^16;对于100%的数据,k≤100,x≤2^31-1,k≤g(x)。
_NOI导刊2010提高(01)
分析:考虑dp,设f[i][j]表示选了i个数,和为j的正整数解组数.很显然f[i][j]=∑f[i-1][j-kk],kk是i能够取到的数,答案是f[x^x % 1000][k].复杂度是三次方级别的,看有没有方方法来优化一下.单纯从dp上来看似乎是只能优化空间了,如果有公式就好了,类似青蛙过河一样。
其实问题可以变成我们要走k步,每一步走的距离任意,走的总距离要为x,求方案数,因为每一步走的距离任意,实际上我们只要把这k步分配到x中就好了.把x抽象成x个点,画在图上,就能发现走k步实际上是在x-1个间隔中找k-1个间隔,那么答案就是C(x-1,k-1).
因为k,x很大,所以要用到高精度,我用结构体写高精度总是出现奇怪的错误,以后还是用数组了.
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; long long k,x;
int f[][][]; long long qpow(long long a,long long b,int mod)
{
long long ans = ;
while (b)
{
if (b & )
ans = (ans * a) % mod;
a = (a * a) % mod;
b >>= ;
}
return ans;
} void add(int x,int y,int x1,int y1,int x2,int y2)
{
for (int i = ; i <= max(f[x1][y1][],f[x2][y2][]); i++)
{
f[x][y][i] += f[x1][y1][i] + f[x2][y2][i];
f[x][y][i + ] = f[x][y][i] / ;
f[x][y][i] %= ;
}
f[x][y][] = max(f[x1][y1][],f[x2][y2][]);
if (f[x][y][f[x][y][] + ])
f[x][y][]++;
} int main()
{
scanf("%lld%lld",&k,&x);
x = qpow(x,x,); for (int i = ; i < x; i++)
f[i][][] = f[i][][] = ; for (int i = ; i < x; i++)
for (int j = ; j < k; j++)
add(i,j,i-,j,i-,j-); for (int i = f[x-][k-][]; i >= ; i--)
printf("%d",f[x-][k-][i]);
printf("\n"); return ;
}
洛谷P1771 方程的解_NOI导刊2010提高(01)的更多相关文章
- P1771 方程的解_NOI导刊2010提高(01)
P1771 方程的解_NOI导刊2010提高(01) 按题意用快速幂把$g(x)$求出来 发现这不就是个组合数入门题吗! $k$个人分$g(x)$个苹果,每人最少分$1$个,有几种方法? 根据插板法, ...
- 洛谷—— P1775 古代人的难题_NOI导刊2010提高(02)
P1775 古代人的难题_NOI导刊2010提高(02) 题目描述 门打开了,里面果然是个很大的厅堂.但可惜厅堂内除了中央的一张羊皮纸和一支精致的石笔,周围几具骷髅外什么也没有.难道这就是王室的遗产? ...
- 方程的解_NOI导刊2010提高(01) 组合数
题目描述 佳佳碰到了一个难题,请你来帮忙解决. 对于不定方程a1+a2+…+ak-1+ak=g(x),其中k≥2且k∈N,x是正整数,g(x)=x^x mod 1000(即x^x除以1000的余数), ...
- 洛谷——P1775 古代人的难题_NOI导刊2010提高(02)&& P1936 水晶灯火灵(斐波那契数列)
P1775 古代人的难题_NOI导刊2010提高(02) P1936 水晶灯火灵 斐波那契数列 1.x,y∈[1…k],且x,y,k∈Z 2.(x^2-xy-y^2)^2=1 给你一个整数k,求一组满 ...
- 洛谷 P1807 最长路_NOI导刊2010提高(07) 题解
P1807 最长路_NOI导刊2010提高(07) 题目描述 设G为有n个顶点的有向无环图,G中各顶点的编号为1到n,且当为G中的一条边时有i < j.设w(i,j)为边的长度,请设计算法,计算 ...
- 方程的解_NOI导刊2010提高
方程的解 给定x,求\(a_1+a_2+...+a_k=x^x\ mod\ 1000\)的正整数解解的组数,对于100%的数据,k≤100,x≤2^31-1. 解 显然x是可以快速幂得到答案的,而该问 ...
- 洛谷 P1807 最长路_NOI导刊2010提高(07)
最长路 #include <iostream> #include <cstdio> #include <cstring> #include <queue> ...
- 洛谷 P1807 最长路_NOI导刊2010提高(07)题解
相当与一个拓扑排序的模板题吧 蒟蒻的辛酸史 题目大意:给你一个有向无环图,让你求出1到n的最长路,如果没有路径,就输出-1 思路:一开始以为是一个很裸的拓扑排序 就不看题目,直接打了一遍拓扑排序 然后 ...
- 洛谷P1807 最长路_NOI导刊2010提高(07)
//拓扑排序求最长路 #include<bits/stdc++.h> #include<queue> using namespace std; const int INF=0x ...
随机推荐
- CentOS 7.2安装pip
CentOS 7.2默认安装的python版本为python2.7.5,我的系统里面默认是没有安装pip 的,搜了下网上各路大侠的解决办法,如下: 使用yum安装python-pip,但是报错,说没有 ...
- jQuery中面向对象思想实现盒子内容切换
这里主要是模拟小米官网中的首页的内容模块实现的主要动态效果 布局:采用了bootstrap框架进行布局,及其其中的字体图标 html: <!-- 内容 --> <div class= ...
- Thrift入门及Java实例演示【转】
概述 Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++.Java.Python.PHP.Ruby.Erlang.Perl.Ha ...
- 洛谷 P1507 NASA的食物计划
题目背景 NASA(美国航空航天局)因为航天飞机的隔热瓦等其他安 全技术问题一直大伤脑筋,因此在各方压力下终止了航天 飞机的历史,但是此类事情会不会在以后发生,谁也无法 保证,在遇到这类航天问题时,解 ...
- SPICE-HTML5 鼠标指针BUG修复
研究SPICE,找到了他们官方指定的HTML5客户端.下载下来用一下,发现跟网页VNC的水平差不多了.http://www.spice-space.org/page/Html5 服务端直接用QEMU起 ...
- Charles Petzold 编程界大师,世界顶级技术作家 《CODE》值得阅读
<CODE>The Hidden Language of Computer Hardware and Software 从书内容的第一页开始就惊叹于作者的耐心和责任心 整本书以两个隔街对窗 ...
- 善用Object.defineProperty巧妙找到修改某个变量的准确代码位置
我今天的工作又遇到一个难题.前端UI右下角这个按钮被设置为"禁用(disabled)"状态. 这个按钮的可用状态由属性enabled控制.我通过调试发现,一旦下图第88行代码执行完 ...
- varchar2(100 char)是什么意思
最佳答案 varchar2(100 char)最长可以插入100个任意字符而varchar2(100)最长可以插入100个英文字符
- 数据库管理系统X
大部分DBMS提供数据定义语言DDL(Data Definition Language)和数据操作语言DML(Data Manipulation Language),供用户定义数据库的模式结构与权限约 ...
- 测试常用的linux命令
一.系统 1.halt: 关机 poweroff: 关机 2.reboot: 重启 二.处理目录和文件的命令 1.ll: 显示文件详细信息 ls: 显示文件目 ...