【水题】HDU 5646
来源:互联网 发布:长期成本 知乎 编辑:程序博客网 时间:2024/05/17 07:32
想要乘积大,那么挑的数肯定要越相近越好。想过分治,但是不能保证挑的数不重复。
并且要满足sum(1,m) >= n。所以基于1,2,3,..m的数列。。于是对于1-m每个数都加上(n-sum(m))/m,再从后往前把多余的数值补上去。。
其实这是打表发现的。。= =
#include <cstdio>#include <cstring>#include <iostream>using namespace std;#define ll long longll mod = 1000000007;ll check(ll x){ ll a = x/2; if(!(x%2)) return (1+x)*a; else return ((1+x)*a%mod+a+1);}int main(){ ll t,n,m; cin>>t; while(t--) { scanf("%lld%lld",&n,&m); ll sum=1; ll test = check(m); if(test>n) {cout<<"-1"<<endl;continue;} if(test==n) { for(ll i=1;i<=m;i++) { sum=(sum*i)%mod; } printf("%lld\n",sum); continue; } ll a=(n-test)/m,b=(n-test)%m; for(ll i=a+m,j=0;j<m;j++,i--) { if(b>0) { sum=(sum*(i+1)); b--; } else { sum=(sum*i); } sum%=mod; } printf("%lld\n",sum); } return 0;}
0 0
- 【水题】HDU 5646
- hdu 5646
- hdu水题
- hdu 水题
- HDU 1800(水题!!! @@)
- hdu 1231 DP水题
- HDU 2114 水题
- 水题 hdu 1070 milk
- HDU-1012 水题
- hdu 1029 计数 水题
- HDU-1040(水题)
- HDU 4081 prim水题
- hdu 1056 HangOver 水题
- HDU 2716 水题
- HDU 1005 ,水题
- hdu 1056 水题
- hdu 1057 水题
- hdu 1064 水题
- 【二叉树系列】二叉树课程大作业
- Team Queue. id:540
- 如何阅读caffe代码
- poj 3984
- 1010 of greedy strategy
- 【水题】HDU 5646
- c++友元函数及运算符重载
- 任何经历,都是一种积累
- HTML整站规划笔记
- 手机卫士 第二天
- 刷题第一天:南邮NOJ求最大数
- eclipse代码提示
- css 兼容ie6,ie7,ff的fixed,元素上下端固定定位方法
- List循环与Map循环的总结