vijosP1371 方程的解

链接:https://vijos.org/p/1371

【思路】

组合公式+快速幂+高精单精。

求x^x %1000:因为x最大为2^31-1所以用快速幂在O(logx)的时间内求解g。

安排剩下的k个数:C(g-1,k-1) 相当于把g个数划分到k个不可空的集合中的数目,依旧可以看作插挡板。

考虑这类题目我们可以先从简单情况入手写一个能够处理简单数据的代码,然后再考虑优化的问题。

【代码】

 #include<iostream>
using namespace std; typedef long long LL;
struct Bign{
int len,N[];
};
LL pow(int x) {
LL tmp=x,ans=;
while(x) {
if(x&) ans=(ans*tmp)%;
tmp=(tmp*tmp)%;
x>>=;
}
return ans;
} void multi(Bign& a,int x)
{
for(int j=;j<a.len;j++) a.N[j] *= x;
int i=;
while(i<a.len || a.N[i]>) {
a.N[i+] += a.N[i]/;
a.N[i] %= ;
i++; //i++
}
if(a.N[i]) a.len=i+; //判断
else a.len=i;
} void div(Bign& a,int x) {
for(int i=a.len-;i>;i--) { //由高位到低位
a.N[i-] += a.N[i]%x*;
a.N[i] /= x;
}
a.N[]/=x; //最后一位
while(a.N[a.len-]==) a.len--; //删除前导0
} int main() {
int k,x;
cin>>k>>x;
LL g=pow(x); //x^x
g--; k--;
Bign ans; ans.len=,ans.N[]=;
for(int i=;i<=k;i++) {
multi(ans,g-k+i);
div(ans,i);
}
for(int i=ans.len-;i>=;i--) cout<<ans.N[i];
return ;
}

vijosP1371 方程的解的更多相关文章

  1. 方程的解_NOI导刊2010提高

    方程的解 给定x,求\(a_1+a_2+...+a_k=x^x\ mod\ 1000\)的正整数解解的组数,对于100%的数据,k≤100,x≤2^31-1. 解 显然x是可以快速幂得到答案的,而该问 ...

  2. P1771 方程的解_NOI导刊2010提高(01)

    P1771 方程的解_NOI导刊2010提高(01) 按题意用快速幂把$g(x)$求出来 发现这不就是个组合数入门题吗! $k$个人分$g(x)$个苹果,每人最少分$1$个,有几种方法? 根据插板法, ...

  3. 【Java例题】4.4使用牛顿迭代法求方程的解

    4. 使用牛顿迭代法求方程的解:x^3-2x-5=0区间为[2,3]这里的"^"表示乘方. package chapter4; public class demo4 { publi ...

  4. 模拟7题解 T1方程的解

    方程的解 [扩展欧几里德] 首先进行特判,两个小时基本想到了,除了a!=0,b==0,a*c<0这种情况 其次就是一般情况: 首先exgcd求出ax+by=GCD(a,b)的一组任意解 然后两边 ...

  5. 洛谷P1771 方程的解

    P1771 方程的解 都知道这个题可以用隔板法做 把这个\(g(x)\)想象为.....\(g(x)\)个苹果? 因为解是正整数,所以给这些"苹果"分组的时候每组最少有一个 然后我 ...

  6. codevs3732==洛谷 解方程P2312 解方程

    P2312 解方程 195通过 1.6K提交 题目提供者该用户不存在 标签数论(数学相关)高精2014NOIp提高组 难度提高+/省选- 提交该题 讨论 题解 记录   题目描述 已知多项式方程: a ...

  7. C++ 二分法求解方程的解

    二分法是一种求解方程近似根的方法.对于一个函数 f(x)f(x),使用二分法求 f(x)f(x) 近似解的时候,我们先设定一个迭代区间(在这个题目上,我们之后给出了的两个初值决定的区间 [-20,20 ...

  8. [CSP-S模拟测试]:方程的解(小学奥数)

    题目描述 给出一个二元一次方程$ax+by=c$,其中$x$.$y$是未知数,求它的正整数解的数量. 输入格式 第一行一个整数$T$,表示有$T$组数据.接下来$T$行,每行$3$个整数$a$.$b$ ...

  9. [7.22NOIP模拟测试7]方程的解 题解(扩展欧几里得)

    Orz 送分比较慷慨的一道题,疯狂特判能拿不少分. 对于$a>0,b>0$的情况: 用exgcd求出方程通解,然后通过操作得到最小正整数解和最大正整数解 他们以及他们之间的解满足等差数列性 ...

随机推荐

  1. perl命令批量替换文件内容

    转自:http://www.jbxue.com/article/12638.html 使用perl命令批量替换文件内容. 对linux下的文件内容进行替换,有时不用编写perl脚本,用perl命令就可 ...

  2. Linux oracle数据库自动备份自动压缩脚本代码

    Linux oracle数据库备份完成后可以自动压缩脚本代码. 复制代码代码如下: #!/bin/bash #backup.sh #edit: www.jbxue.com ##系统名称 sysname ...

  3. Linux操作命令(一)

    ls 命令 ls 命令是 linux 下最常用的命令,ls 命令就是 list 的缩写. ls 用来打印出当前目录的清单.如果 ls 指定其他目录,那么就会显示指定目录里的文件及文件夹清单. 通过 l ...

  4. linux环境下验证码不显示的几种情况

    linux环境下验证码不显示的几种情况 gd库扩展没有安装. 查看phpinfo(),看看有没有安装gd库 yum安装gd库或者phpize安装 安装完成后记得重启php-fpm bom头的原因 在生 ...

  5. Asp.Net MVC ajax调用 .net 类库问题

    如果你还在为 ajax 调用 .net 类库还束手无策的话,相信这篇博客将帮助你解决这个世纪问题! 因为Visual Studio 内置了asp.net mvc ,不过当你添加asp.net mvc项 ...

  6. POJ 2375 Cow Ski Area[连通分量]

    题目链接:http://poj.org/problem?id=2375题目大意:一片滑雪场,奶牛只能向相邻的并且不高于他当前高度的地方走.想加上缆车是的奶牛能从低的地方走向高的地方,求最少加的缆车数, ...

  7. 第三章—Windows程序

    这一章我都不知道该如何写了,呵呵~~ 毕竟,Win32是一个非常深奥的系统,目前还容不得我这种 小辈在这儿说三道四,不过,我既然是要写给那些入门阶段的朋友们看的,又不是写给那些搞程序设计老鸟看的,所以 ...

  8. easyui源码翻译1.32--DateBox(日期输入框)

    前言 扩展自$.fn.combo.defaults.使用$.fn.datebox.defaults重写默认值对象.下载该插件翻译源码 日期输入框结合了一个可编辑的文本框控件和允许用户选择日期的下拉日历 ...

  9. webbench的详细使用

    webbench是什么?是一款相当给力的网站压力测试工具.(优点自行搜索) 使用webbench需要两大步骤: 1.安装webbench 2.熟悉webbench命令 一.安装webbench 1.下 ...

  10. SPRING IN ACTION 第4版笔记-第八章Advanced Spring MVC-002-SpringFlow的组件(state\<transition>\<var>\<set>\<evaluate>)

    一. In Spring Web Flow, a flow is defined by three primary elements: states, transitions,and flow dat ...