P5316 恋恋的数学题

题目背景

恋恋是个可爱的女孩子,最近她沉迷了做数学题。

题目描述

现在恋恋正在处理的题目十分简单:现在有k \space (2\leq k\leq 4)k (2≤k≤4)个数,恋恋不知道它们分别是几,只知道它们两两最大公约数及最小公倍数。

按照套路,恋恋非常想复原出那kk个数,但是现在她需要假装不会做,于是她就把题目交给了你,如果你顺利解决了这个问题,恋恋就会在你背后疯狂打call……

输入输出格式

输入格式:

第一行,两个整数TT和kk

接下来2T2T行包含TT组数据,每组数据包含两行,

第一行,\frac{k(k-1)}22k(k−1)​个整数,表示kk个未知数的两两最大公约数,乱序

第二行,\frac{k(k-1)}22k(k−1)​个整数,表示kk个未知数的两两最小公倍数,乱序

输出格式:

输出TT行,每行kk个用空格分隔的数,表示任意一组符合对应数据的答案。

输入输出样例

输入样例#1: 复制

1 3
4 6 2
48 144 36
输出样例#1: 复制

16 12 18
输入样例#2: 复制

2 4
4 2 4 6 4 2
48 144 16 36 12 36
1 1 1 1 2 1
56 63 70 72 40 90
输出样例#2: 复制

16 12 18 4
7 8 9 10

说明

保证奇数测试点中,第一行(gcd行)数据均为11

测试点编号    kk    输入整数不超过   
1,2 2 100100
3,4 2 10001000
5,6 2 10^7107
7,8 3 100100
9,10 3 10^7107
11,12 3 10^{14}1014
13,14 4 100100
15,16 4 10^7107
17,18 4 10^{14}1014
19,20 4 10^{18}1018

保证数据有解,T\leq 5T≤5

SPJ按照每组中的正确比例给分,但如果TLE、RE等会导致无输出而爆零

sol:这个k非常小,所以那个乱序就是让我们爆搜用的,知道了每个数字两两之间的gcd和lcm就很好做了,因为gcd(a,b)*lcm(a,b)=a*b,所以我们就得到了每个数字两两之间的乘积 易知a=sqrt((a*b)*(a*c)/(b*c))

这样就可以轻松做出k=3的数据了,然后我暂时还没想出k=4怎么做(感觉用一模一样的方法可以过720*720*4*玄学)

但是k=4还没写。。。所以只有60pts

Ps :丧心病狂的出题人卡long long ,甚至直接__int128有些地方也会爆

感觉洛谷完全做不动了

#include <bits/stdc++.h>
using namespace std;
//typedef long long ll;
inline __int128 read()
{
__int128 s=;
bool f=;
char ch=' ';
while(!isdigit(ch))
{
f|=(ch=='-'); ch=getchar();
}
while(isdigit(ch))
{
s=(s<<)+(s<<)+(ch^); ch=getchar();
}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(__int128 x)
{
if(x<)
{
putchar('-'); x=-x;
}
if(x<)
{
putchar(x+''); return;
}
write(x/);
putchar((x%)+'');
return;
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n') #define G1 Gcd[1]
#define G2 Gcd[2]
#define G3 Gcd[3]
#define G4 Gcd[4]
#define G5 Gcd[5]
#define G6 Gcd[6]
#define L1 Lcm[1]
#define L2 Lcm[2]
#define L3 Lcm[3]
#define L4 Lcm[4]
#define L5 Lcm[5]
#define L6 Lcm[6]
int T,n;
__int128 Gcd[],Lcm[]; inline __int128 Div(__int128 a,__int128 b,__int128 c); //a*b/c
inline __int128 Sqrt(__int128 x);
inline __int128 gcd(__int128 a,__int128 b);
inline __int128 lcm(__int128 a,__int128 b);
inline bool Judge(__int128 a,__int128 b,__int128 c); //a,b,c是否满足条件 inline __int128 Div(__int128 a,__int128 b,__int128 c) //a*b/c
{
__int128 g1=gcd(a,c),g2=c/g1;
return (a/g1)*(b/g2);
}
inline __int128 Sqrt(__int128 x)
{
__int128 l=,r=1e18;
while(l<=r)
{
__int128 mid=(l+r)>>;
if(mid*mid==x) return mid;
else if(mid*mid<x) l=mid+;
else r=mid-;
}
return ;
}
inline __int128 gcd(__int128 a,__int128 b)
{
return (!b)?(a):(gcd(b,a%b));
}
inline __int128 lcm(__int128 a,__int128 b)
{
return Div(a,b,gcd(a,b));
}
inline bool Judge(__int128 a,__int128 b,__int128 c)
{
if((gcd(a,b)!=G1)||(lcm(a,b)!=L1)) return false;
if((gcd(a,c)!=G2)||(lcm(a,c)!=L2)) return false;
if((gcd(b,c)!=G3)||(lcm(b,c)!=L3)) return false;
return true;
}
namespace n2
{
inline void Solve()
{
while(T--)
{
W(read()); Wl(read());
}
}
}
namespace n3
{
inline void Solve()
{
int i;
while(T--)
{
for(i=;i<=;i++) R(Gcd[i]);
for(i=;i<=;i++) R(Lcm[i]);
sort(Gcd+,Gcd+);
do
{
sort(Lcm+,Lcm+);
do
{
__int128 ab=G1*L1,ac=G2*L2,bc=G3*L3;
__int128 a2=Div(ab,ac,bc),b2=Div(ab,bc,ac),c2=Div(ac,bc,ab);
__int128 a=Sqrt(a2),b=Sqrt(b2),c=Sqrt(c2);
if((!a)||(!b)||(!c)) continue;
else if(Judge(a,b,c))
{
W(a); W(b); Wl(c); goto loop;
}
}while(next_permutation(Lcm+,Lcm+));
}while(next_permutation(Gcd+,Gcd+));
loop:;
}
}
}
namespace n4
{
inline void Solve()
{ }
}
int main()
{
R(T); R(n);
if(n==) n2::Solve();
else if(n==) n3::Solve();
else if(n==) n4::Solve();
return ;
}
/*
input
1 3
4 6 2
48 144 36
output
16 12 18
*/

luogu5316的更多相关文章

随机推荐

  1. 从URL到看到网页的过程

    从我们输入URL并按下回车键到看到网页结果之间发生了什么?换句话说,一张网页,要经历怎样的过程,才能抵达用户面前?下面来从一些细节上面尝试一下探寻里面的秘密. 前言:键盘与硬件中断 说到输入URL,当 ...

  2. 教你快速撸一个免费HTTPS证书

    摘要: 免费 HTTPS 证书,了解一下? HTTPS 已成为业界标准,这篇博客将教你申请Let's Encrypt的免费 HTTPS 证书. 本文的操作是在 Ubuntu 16.04 下进行,使用 ...

  3. Vue.js如何在一个页面调用另一个同级页面的方法

    使用场景: 页面分为header.home.footer三部分,需要在home中调用header中的方法,这两个没有相互引入 官方给出方法: 需要在展示页里调用顶部导航栏页里的方法,两者之间没有引用关 ...

  4. TCP客户端

    TCP通信客户端-解决数据包接收不全的过程 背景:5个串口条码枪,通过MOXA Nport系列转换器,以TCPServer的形式推送扫描到的条码到客户端.5个条码枪均位于流水线上方的支架上,流水线货物 ...

  5. 深入理解Java内存(图解堆栈)

    深入理解Java内存(图解)--转载 深入理解Java内存(图解) 这篇文章是转自http://blog.csdn.net/shimiso/article/details/8595564博文,自己对其 ...

  6. Android系统的三种分屏显示模式

    Google在Android 7.0中引入了一个新特性——多窗口支持,允许用户一次在屏幕上打开两个应用.在手持设备上,两个应用可以在"分屏"模式中左右并排或上下并排显示.在电视设备 ...

  7. 南京邮电大学java程序设计作业在线编程第八次作业

    程序设计类课程作业平台 王利国 主页 教学资源 我的作业列表 程序设计课 账户 王利国的"Java语言程序设计第8次作业(2018)"详细 主页 我的作业列表 作业结果详细 总分: ...

  8. Truffle 4.0、Geth 1.7.2、TestRPC在私有链上搭建智能合约

    目录 目录 1.什么是 Truffle? 2.适合 Truffle 开发的客户端 3.Truffle的源代码地址 4.如何安装? 4.1.安装 Go-Ethereum 1.7.2 4.2.安装 Tru ...

  9. c/c++ 拷贝控制 右值与const引用

    拷贝控制 右值与const引用 背景:当一个函数的返回值是自定义类型时,调用侧用什么类型接收?? 1,如果自定义类型的拷贝构造函数的参数用const修饰了:可以用下面的方式接收. Test t2 = ...

  10. Cs231n课堂内容记录-Lecture 6 神经网络训练

    Lecture 6  Training Neural Networks 课堂笔记参见:https://zhuanlan.zhihu.com/p/22038289?refer=intelligentun ...