2016 ICPC大连站---F题 Detachment
题意:输入一个x,将x拆分成一些小的数(这些数不能相同,即x=a1+a2+...... ai!=aj when i!=j),然后这些数相乘得到一个成积(s=a1*a2*......),求最大的乘积s;
思路:考虑最简单的做法便是贪心,很明显将一个数分的越小,这个乘积越大,那么对于给的x 先找2+3+4+....+n<=x 找到最大的n 如果和小于x ,那么将n右移一个数(n->n+1) 如果和还小于x继续将n-1右移......知道和x相等时,输出s 这样做时间复杂度很高,那么得优化。 由上面的过程分析发现,2+3+...+n<=x &&2+3+...+n+(n+1)>x
那么x-(2+3+...+n)<=n 那么最终x分成的数结果只有三种情况:x=2+3+...+(k-1)+(k+1)+...+n+(n+1) x=3+4+...+n+(n+1) x=3+4+...+(n-1)+n+(n+2)
其实第一种和第二种情况相同。 分析过程如上,详细计算过程如下:2+3+...+n<=x 所以n*(n+1)<=2*x+2 n<=sqrt(2*n+2)
代码如下:
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <bitset>
using namespace std;
typedef long long LL;
const LL mod=1e9+;
const LL maxn=1e5+;
LL A[maxn],s[maxn];
LL Inv[maxn];
void getINV()///逆元;
{
Inv[]=;
for(LL i=; i<maxn; i++)
Inv[i] = (mod-mod/i)*Inv[mod%i]%mod;
}
void init()
{
s[]=;
for(LL i=;i<maxn;i++)
s[i]=s[i-]+i;
A[]=;
for(LL i=;i<maxn;i++)
A[i]=A[i-]*i%mod;
getINV();
} int main()
{
init();
int T;
cin>>T;
while(T--)
{
int pos;
LL x,sum;
scanf("%lld",&x);
LL n=(LL)(sqrt(*x+));
for(int i=n;i>=;i--)
if(s[i]<=x){
pos=i;
break;
}
if(x==) { puts(""); continue; }
if(s[pos]==x) { printf("%lld\n",A[pos]); continue; }
if(s[pos]+pos->=x){
LL tot=s[pos]+pos--x;
sum=(A[pos+]*Inv[tot+])%mod;
}
else{
LL tot=s[pos+]-+pos--x;
sum=((A[pos+]*Inv[])%mod)*Inv[tot+]%mod;
}
printf("%lld\n",sum);
}
return ;
}
2016 ICPC大连站---F题 Detachment的更多相关文章
- 2016 ICPC青岛站---k题 Finding Hotels(K-D树)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5992 Problem Description There are N hotels all over ...
- 2016 ACM/ICPC亚洲区大连站 F - Detachment 【维护前缀积、前缀和、二分搜索优化】
F - Detachment In a highly developed alien society, the habitats are almost infinite dimensional spa ...
- 2014ACM/ICPC亚洲区西安站 F题 color (组合数学,容斥原理)
题目链接:传送门 题意: n个格子排成一行.我们有m种颜色.能够给这些格子涂色,保证相邻的格子的颜色不同 问,最后恰好使用了k种颜色的方案数. 分析: 看完题目描写叙述之后立刻想到了一个公式 :C(m ...
- hdu 5874 Friends and Enemies icpc大连站网络赛 1007 数学
#include<stdio.h> #include<iostream> #include<algorithm> #include<math.h> #i ...
- 2015 ICPC 沈阳站M题
M - Meeting Time Limit:6000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit ...
- 2016 ICPC 大连网络赛 部分题解
先讲1007,有m个人,n种石头,将n种石头分给m个人,每两个人之间要么是朋友关系,要么是敌人关系,朋友的话他们必须有一种相同颜色的石头,敌人的话他们必须所有石头的颜色都不相同.另外,一个人可以不拥有 ...
- HDU 5875 Function -2016 ICPC 大连赛区网络赛
题目链接 网络赛的水实在太深,这场居然没出线zzz,差了一点点,看到这道题的的时候就剩半个小时了.上面是官方的题意题解,打完了才知道暴力就可以过,暴力我们当时是想出来了的,如果稍稍再优化一下估计就过了 ...
- hdu 5876 Sparse Graph icpc大连站网络赛 1009 补图最短路
BFS+链表 代码改自某博客 #include<stdio.h> #include<iostream> #include<algorithm> #include&l ...
- HDU 5976 Detachment 【贪心】 (2016ACM/ICPC亚洲区大连站)
Detachment Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
随机推荐
- Docker实践:运行Python应用
本文将使用fig应用编排实现一个python的计数器,并使用web展示. 阅读本文您需要具备以下知识: 1.了解Python 2.熟练Docker基础知识(包括Dockerfile语法) 3.了解Do ...
- [大数据之Sqoop] —— 什么是Sqoop?
介绍 sqoop是一款用于hadoop和关系型数据库之间数据导入导出的工具.你可以通过sqoop把数据从数据库(比如mysql,oracle)导入到hdfs中:也可以把数据从hdfs中导出到关系型数据 ...
- Java接口总结
接口的定义: 使用interface来定义一个接口.接口定义与类的定义类似,也是分为接口的声明和接口体,其中接口体由变量定义和方法定义两部分组成,定义接口的基本语法如下: [修饰符] interfac ...
- 谈初学Java历程
学习Java一个月左右,本来很早就想好好静下心来写一点东西了.但由于不想手写,文档写了不知道放在哪好,所以一直拖着.最近注册了博客园,还是挺方便的. 即将大学毕业了,则面临了所以大学生所面临的问题,就 ...
- KnockoutJS 3.X API 第六章 组件(3) 组件绑定
组件绑定将指定的组件注入到元素中,并且可选地将参数传递给它. 本节目录 一个例子 API 组件生命周期 备注1:仅限模板组件 备注2:使用没有容器元素的组件 备注3:将标记传递给组件 处置和内存管理 ...
- 【转】SQL删除重复数据方法,留着备用
感谢孙潇楠前辈的总结,地址http://www.cnblogs.com/sunxiaonan/archive/2009/11/24/1609439.html 例如: id name ...
- 万能Adapter以及ViewHolder性能优化
//CommonAdapter import android.content.Context; import android.widget.BaseAdapter; import java.util. ...
- 【开源】OSharp3.0框架解说系列(6.2):操作日志与数据日志
OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...
- Android探索之BroadcastReceiver具体使用以及安全性探究
前言: 最近的计划是学习一下iOS的NSNotificationCenter,突然想起来的Android的广播机制,所以还是觉得先对BroadcastReceiver来个全面的总结然后再去学习NSNo ...
- 辨析relative与absolute
谈起它们,想必大家都不陌生.relative,相对定位嘛:absolute,绝对定位嘛.但是它们到底是个啥东东呢? 看看w3c的定义,见下表 定位 含义 relative 元素框偏移某个距离.元素仍保 ...