【牛客 - 318E】爱摸鱼的Dillonh(数学,暴力,细节)
题干:
“我不做人啦,jojo!”
“Dillonh起来回答问题!”
“啊?”沉迷于jojo的Dillonh又一次上课摸鱼被老师抓到了,他慌忙地抬起头看着讲台上火冒三丈的老师。
“给你一个数n,现在要找到一个集合AA,AA中若干数a1,a2,……ama1,a2,……am,使得n=a1∗a2∗a3∗……∗amn=a1∗a2∗a3∗……∗am,同时对于任意的i和j(1≤i,j≤n1≤i,j≤n)都要满足∣∣ai−aj∣∣≤1|ai−aj|≤1,你能找到所有满足这个条件的集合AA吗。如果对于这个数n有无限多个可能的集合AA,那么就输出-1,否则就输出所有不同的集合。”如果眼神能杀人的话,此刻的Dillonh就已经被他的老师杀了千万遍了。
“这...”沉迷摸鱼的Dillonh自然是不会做这个题的,他现在急的满头大汗。作为聪明的ACMer,你能帮他解决这个问题吗?
(对于两个集合AA和BB,如果两个集合内元素的个数不同的话,就认为这两个集合是不同的;如果这两个集合内元素个数相同的话,如果两个集合内的元素不论以任何顺序排序之后,仍然是不完全相同的话,那么就认为这两个集合是不同的)。
输入描述:
第一行一个数字T,代表有T组测试样例(T<=100)
对于每组测试样例都会输入一个数字n,代表老师提出的问题的数。(n≤1018n≤1018)。
输出描述:
对于每组测试样例,第一行输出一个“Case #x:”,x代表当前为第几组测试样例。如果有无限多个满足条件的集合,第二行就输出“-1”;否则的话,第二行输出一个数字m,代表有m个集合是满足条件的。接下来m行输出这m个集合的信息,按集合内元素个数的大小从小到大输出,每行的第一个数num代表集合内元素的个数,接下来按从小到大输出num个数。每行的两个数之间用一个空格隔开,行末不要有空格。
示例1
输入
复制
2
12
1
输出
复制
Case #1:
3
1 12
2 3 4
3 2 2 3
Case #2:
-1
解题报告:
(来自官方题解)
这是一个考验数学思维的题目。
当满足条件的集合内只有两个数的时候,要么n=a*a,要么n=a*(a-1),我们可以直接对
n进行开根号运算,令cnt1 = ceil(sqrt(n)),cnt2 = floor(sqrt(n)),然后判断cnt1 *
cnt2 是否等于n即可。
当满足条件的集合内有大于等于三个数的时候,我们可以知道n = a * a * a * ... * (a-1)
*...*(a-1)。当a取到最大值时,应该满足n = a * a * a,而n是小于等于1e18的,所以我
们可以知道a是小于等于1e6的,所以我们就可以暴力对a进行枚举了,每次验证一下是否
合法即可。
对于输出“-1”的情况,也就只有当n=1,或者n=2^k的时候会成立,此时n可以分解为
k个2和无数个1相乘的形式,故有无数个集合。最后再按要求处理一下输出就可以了。
AC代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
#define fi first
#define se second
using namespace std;
const int MAX = 2e5 + 5;
const ll mod = 1e9+7;
typedef long double ld;
int T;
ll n;
vector<vector<ll> > vv;
int main() {scanf("%d",&T);int cas=1;while(T--) {scanf("%lld",&n);ll x=n;while(x%2==0)x/=2;printf("Case #%d:\n",cas++);if(x==1)printf("-1\n");else {vv.clear();for(int i=1; i<=60; i++) {ll t=(ll)powl((ld)n,(ld)(1.0/i));if(t==1)continue;x=n;vector<ll> v;while(x%t==0)x/=t,v.push_back(t);while(x%(t+1)==0)x/=t+1,v.push_back(t+1);if(v.size()==i&&x==1)vv.push_back(v);}printf("%d\n",vv.size());int up = vv.size();for(int i = 0; i<up; i++) {printf("%d",vv[i].size());int upp = vv[i].size();for(int j = 0; j<upp; j++) printf(" %lld",vv[i][j]);printf("\n");}}}return 0;
}
总结:注意精度问题所以需要powl函数
【牛客 - 318E】爱摸鱼的Dillonh(数学,暴力,细节)相关推荐
- 爱摸鱼的Dillonh
https://ac.nowcoder.com/acm/contest/318/E C++版本一 题解: 这是一个考验数学思维的题目. 当满足条件的集合内只有两个数的时候,要么n=a*a,要么n=a* ...
- 牛客 牛牛爱喝酒(模拟)
文章目录 1. 题目 2. 解题 1. 题目 链接:https://ac.nowcoder.com/acm/contest/9752/A 来源:牛客网 牛牛是一个酒鬼,非常爱喝酒, 一瓶酒m元钱, 两 ...
- 牛客 13822 Keep In Line(枚举与暴力、Python)
同个人网站 https://www.serendipper-x.cn/,欢迎访问 ! 链接:https://ac.nowcoder.com/acm/problem/13822 来源:牛客网 时间限制: ...
- 牛客小白月赛6 J 洋灰三角 数学
链接:https://www.nowcoder.com/acm/contest/136/J 来源:牛客网 题目描述 洋灰是一种建筑材料,常用来筑桥搭建高层建筑,又称,水泥.混凝土. WHZ有很多铸造成 ...
- 为情怀买单--爱摸鱼的美工(14)
-----------作者:天涯小Y 4 hours later 花钱坐得屁股痛 你就折腾吧! 生活中有四件事可以改变你 爱.音乐.文字和失去 前三件事让人心生希望 请允许最后一件事使你变得勇敢 希望 ...
- 唯愿山城无恙-烟火寻常--爱摸鱼的美工(五)
-----------作者:天涯小Y 非常时期的非常生活! 今天是承上启下的一天 无论好坏,本月都收官了 洗去一身的疲惫 大脑放空,搓澡 热衷搓澡的程度,简直不像南方人 收拾一下,迎接新的开始 原本一 ...
- 牛客-乃爱与城市拥挤程度【树形dp】
正题 题目链接:https://ac.nowcoder.com/acm/contest/1100/B 题目大意 nnn个点的一棵树,对于每个点求 距离该点不超过kkk的点数 每个点的权值是以该点为起点 ...
- 城市微光,大抵如此--爱摸鱼的美工(15)
-----------作者:天涯小Y 有趣的灵魂藏在社区里 厉害的人打造自己的天地 老街道,新店铺,小日子 下学的孩子欢笑耳语 约会的情侣谈情说爱 三五好友话家长里短 我们谈论柴米油盐,也有诗和远方 ...
- 揣着一口袋的阳光满载而归--爱摸鱼的美工(13)
-----------作者:天涯小Y 揣着一口袋的阳光满载而归! 慷懒周末 睡到自然醒,阳光洒在书桌上 套进宽松自在的衣服里 出门,去楼下坐坐 在阳光里吃午餐 在阳光里打个盹 在阳光里看猫咪上蹿下跳 ...
最新文章
- 互联网笔试各种主流语言在OJ上的的标准输入输出
- Http请求之优雅的RestTemplate
- 系统动力学9种模型_软工国际标准专栏(9)|系统和软件质量模型
- datepicker不能选择是为什么_为什么客厅不好看?休闲椅选错了
- JAVA入门级教学之(Object类中的equals方法)
- android中虚拟程序停止,为什么我的在虚拟机运行后出现应用程序停止运行
- 各种内部排序算法,C#实现
- 【C语言】数组(详细讲解+源码展示)
- 设置Chrome为兼容模式
- LT8911EXB:MIPI CSI/DSI转EDP信号转换芯片-润百信科技提供技术批量支持
- 2022年,人工智能和数据发展呈现哪五大趋势?
- 大数据学习路线-入门精简
- Java 常用正则表达式,Java正则表达式,Java身份证校验,最新手机号码正则表达式...
- C语言娱乐项目————4、一箭双心
- InSAR学习(五)高级的InSAR技术:PS技术和SBAS技术
- Oracle 常用的字符型函数
- 新萝卜家园 Ghost XP SP3 装机至尊版 2013.04
- 森海塞尔PXC 250主动降噪耳机静静地在努力!
- 专家预言未来机器人性XX爱OO或成常态,并利于身心健康
- 令人智熄的智(zhi)能(zhang)蛇
热门文章
- 740. Delete and Earn
- [Leetcode][第1025题][JAVA][除数博弈][数学][递推]
- 5d4的白平衡模式_佳能5D4/5D3/6D2系列中高端单反相机和全画幅微单EOS R专题系列课程...
- 数组的合并和升序排列_leetcode No.31 下一个排列
- decimal这个数据类型的用法,保证你看懂
- base64 转文件_PHP伪协议与文件包含
- 使用rpm包升级ntpd服务_服务器准备升级,小程序将暂停使用
- python的web可视化_Python的Web可视化框架Dash(8)---核心组件
- 3.6.4python下载安装教程_python 3.6.4安装教程
- NSIS 查找文件是否存在,并设置安装路径