2018 Multi-University Training Contest 1 : Maximum Multiple
发布日期:2021-06-30 16:05:57
浏览次数:2
分类:技术文章
本文共 774 字,大约阅读时间需要 2 分钟。
因为 x|n ,y|n ,z|n 我们假设存在 n%a=n%b=n%c=0
使得x=n/a , y=n/b , z=n/c 并且n/a + n/b + n/c = n
因为x,y,z的取值是无序的,所以我们可以设a<=b<=c,即x>=y>=z
我们枚举 a 的所有取值情况:a=2 (a最小为2),所以 n/b+n/c=n/2 ,得到 2b+2c=b*c ,这里的解只有两个 (3,6)和(4,4)
a=3 (a最大为3),因为 a<=b<=c , 这里只有 b=c=3 ,不然 n/a + n/b + n/c!=n
所以有三种情况:
a=2,b=3,c=6
a=2,b=4,c=4 a=3,b=3,c=3
但是我们还要xyz最大,即nnn/(abc)最大,所以我们要把 a=2,b=3,c=6 这种情况变成a=3,b=3,c=3 ,因为 n%2=n%3=n%6=0 ,所以 n/2=n/3+n/6 ,所以 x-n/6,y,z+n/6,即 a=3,b=3,c=3,这样的xyz才最大,因为333<236
所以我们就只有两种情况了:
a=2,b=4,c=4
a=3,b=3,c=3
所以这里只有3和4的倍数满足情况
我的代码:
#includeusing namespace std;int main(){ int T; scanf("%d",&T); while(T--){ int n; scanf("%d",&n); if(n%3==0){ printf("%lld\n",(long long)n*n*n/27); } else if(n%4==0){ printf("%lld\n",(long long )n*n*n/32); } else printf("-1\n"); }}
转载地址:https://kaven.blog.csdn.net/article/details/81178887 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月10日 12时07分09秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
记一次曲折的Debug经历
2019-04-30
Impala支持Google云存储开发笔记
2019-04-30
如何在Apache JIRA中搜索issue
2019-04-30
scrapy 排错记录
2019-04-30
ACM路上的一大失误
2019-04-30
HDOJ2049 不容易系列之(4)——考新郎
2019-04-30
POJ-2418 Hardwood Species(Trie树)(map)
2019-04-30
UVA-11401 Triangle Counting(数学优化)
2019-04-30
Codeforces Round #369 (Div. 2)
2019-04-30
HDU-2838 Cow Sorting(树状数组)
2019-04-30
基于SSM的兼职论坛系统的设计与实现
2019-04-30
基于java的ssm框架就业信息管理系统的设计
2019-04-30
如何用同期群分析模型提升留存?(Tableau实战)
2019-04-30
2021最新 上海互联网公司排名
2019-04-30
Oracle字符串分隔符替换(替换奇数个或偶数个)
2019-04-30
Oracle 利用 UTL_SMTP 包发送邮件
2019-04-30
Oracle 的循环中的异常捕捉和处理
2019-04-30
Oracle的pfile和spfile的一点理解和笔记
2019-04-30
WebService的简单案例记录(Java)
2019-04-30