HDU 5976 数学,逆元
2、题意:给一个正整数x,把x拆分成多个正整数的和,这些数不能有重复,要使这些数的积尽可能的大,输出积。
3、总结:首先我们要把数拆得尽可能小,这样积才会更大(当然不能拆1)。所以容易想到是拆成2+3+...+n+s=x,先求出n即2+3+...+n<x<2+3+...+n+(n+1),然后将某个数向右平移s个单位变为n+1即可。注意:(1)预处理出前缀和,前缀积。(2)将某个数移到n+1,要除这个数再乘n+1,这里要用逆元,也要预处理出来。
#include<bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:102400000,102400000")
#define F(i,a,b) for (int i=a;i<b;i++)
#define FF(i,a,b) for (int i=a;i<=b;i++)
#define mes(a,b) memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f
typedef long long ll;
const int N = 1e5+;
const ll mod = 1e9+; int sum[N],inv[N];
ll mul[N];
//int tot;
void init()
{
sum[]=;
mul[]=inv[]=;
F(i,,N) {
sum[i]=i+sum[i-]; //前缀和
mul[i]=i*mul[i-]%mod; //前缀积
inv[i]=(mod-mod/i)*inv[mod%i]%mod; //O(n)时间内求逆元,要求mod是素数
//tot=i;
}
} int main()
{
int T,x;
scanf("%d", &T);
init();
while(T--)
{
scanf("%d",&x);
if(x<) printf("%d\n", x);
else
{
/* int l=lower_bound(sum+1,sum+1+tot,x)-sum; //可以直接函数二分,找出第一个大于或等于x的位置
if(sum[l]==x) { printf("%d\n", mul[l]); continue; }
l--; */ int l=,r=N,mid=(l+r)>>; //特注:二分写法,mid先定义,不要在while里面
while(l+<r) {
//mid=(l+r)>>1; //注:一开始这样写,错得莫名其妙,还是养成习惯,先在上面定义mid
sum[mid]>x ? r=mid : l=mid;
mid=(l+r)>>;
}
ll ans;
int k,num;
num=x-sum[l], k=l+-num;
if(+num>l) ans=mul[l]*inv[]%mod*(+num)%mod;
else ans=mul[l]*inv[k]%mod*(l+)%mod;
printf("%lld\n", (ans+mod)%mod);
}
} return ;
}
HDU 5976 数学,逆元的更多相关文章
- HDU 5976 数学
Detachment Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- HDU 5976 Detachment(拆分)
HDU 5976 Detachment(拆分) 00 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem D ...
- HDU 5984 数学期望
对长为L的棒子随机取一点分割两部分,抛弃左边一部分,重复过程,直到长度小于d,问操作次数的期望. 区域赛的题,比较基础的概率论,我记得教材上有道很像的题,对1/len积分,$ln(L)-ln(d)+1 ...
- 2016 ACM/ICPC Asia Regional Shenyang Online 1003/HDU 5894 数学/组合数/逆元
hannnnah_j’s Biological Test Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K ...
- HDU - 5976 Detachment(逆元)
题意:将一个数x拆成a1+a2+a3+……,ai不等于aj,求最大的a1*a2*a3*……. 分析: 1.预处理前缀和前缀积,因为拆成1对乘积没有贡献,所以从2开始拆起. 2.找到一个id,使得2+3 ...
- HDU 1576 (乘法逆元)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1576 题目大意:求(A/B)mod 9973.但是给出的A是mod形式n,n=A%9973. 解题思 ...
- HDU 5976 Detachment 打表找规律
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5976 Detachment Time Limit: 4000/2000 MS (Java/Other ...
- HDU 5651 组合+逆元
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5651 题目意思我看了半天没读懂,一直以为是回文子串又没看见substring的单词最后看博客才知道是用给 ...
- HDU 5976 Detachment 【贪心】 (2016ACM/ICPC亚洲区大连站)
Detachment Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
随机推荐
- $_SERVER 详情
$_SERVER['HTTP_ACCEPT_LANGUAGE']//浏览器语言 $_SERVER['REMOTE_ADDR'] //当前用户 IP . $_SERVER['REMOTE_HOST'] ...
- django 强制登录最佳实践
参考: https://python-programming.courses/recipes/django-require-authentication-pages/ 即通过中间件来做AOP拦截.不用 ...
- Python 开源网上商城项目
django-oscar https://github.com/django-oscar/django-oscar#screenshots django-shop https://github.c ...
- java正则表达式获得html字符串中<img src>的src中的url地址
/** * 得到网页中图片的地址 */ public static Set<String> getImgStr(String htmlStr) { Set<String> pi ...
- .net测试学习--理解.net测试选项
1.创建基于测试简单应用程序 (1)启动visual studio(有安装c#的) (2) 选择File|New project (3)创建一个C# project,名字和保存路径自己设定,假设取名 ...
- ASP.NET SignalR入门
前言 之前在培训ASP.NET WebAPI的时候有提过SignalR这个技术,但当时只是讲了是用来做什么的,并没有多说.因为自己也是画图找资料的时候见到的.后来当一直关注的前端大神贤心发布LayIM ...
- Linux 昨天时间
今天date +%F昨天date -d yesterday +%F明天date -d tomorrow +%F七天前date -d "7 days ago" +%F
- 部署Qt程序时plugins相关问题
部署qt程序时,经常涉及到Qt5.5.0\5.5\msvc2013\plugins目录下的一些动态链接库 例如数据库sqldrivers,操作系统类型platforms,读取各种图片imageform ...
- centos6.6 安装jdk1.7
1:在oracle官网下载jdk liunx版本,放入到虚拟机中 2:解压jdk,解压命令 tar -xvzf jdk-7u15-linux-x64.tar.gz 解压完成(如下图) 3:在/usr/ ...
- PHP预定义接口之 ArrayAccess
最近这段时间回家过年了,博客也没有更新,感觉少学习了好多东西,也错失了好多的学习机会,就像大家在春节抢红包时常说的一句话:一不留神错过了好几亿.废话少说,这篇博客给大家说说关于PHP预定义接口中常用到 ...