是个神仙题

就三种情况,分类讨论。

\(k=2\):

因为保证有解,所以直接输出即可。

\(k=3\):

由于对应情况可以枚举全排列寻找,所以在此只考虑顺序对应时的情况,不妨设六个数分别为\(g_{ab},g_{ac},g_{bc},l_{ab},l_{ac},l_{bc}\),由小学数学知识可知\(g_{ab}l_{ab}=ab,g_{ac}l_{ac}=ac,g_{bc}l_{bc}=bc\),又\(\large\frac{ab\cdot ac}{bc}\normalsize=a^2\),所以\(a=\sqrt{\large\frac{ab\cdot ac}{bc}}\),同理\(b=\sqrt{\large\frac{ab\cdot bc}{ac}},c=\sqrt{\large\frac{ac\cdot bc}{ab}}\)。需要注意的是直接算\(ab\cdot ac\)会爆__int128,在此改为计算\(\Large\frac{ab}{\gcd(ab,bc)}\cdot\frac{ac}{\frac{bc}{\gcd(ab,bc)}}\)。

\(k=4\):

同\(k=3\),不妨设所有数分别为\(g_{ab},g_{ac},g_{bc},g_{ad},g_{bd},g_{cd},l_{ab},l_{ac},l_{bc},l_{ad},l_{bd},l_{cd}\),由于已知\(k=3\)的解法,分别求\(a,b,c\),\(a,b,d\)即可,最后合并答案。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long LL;
  4. typedef __int128 LLL;
  5. LLL gcd(LLL u,LLL v){
  6. if(v==0){
  7. return u;
  8. }
  9. return gcd(v,u%v);
  10. }
  11. LLL lcm(LLL u,LLL v){
  12. return u/gcd(u,v)*v;
  13. }
  14. LLL sqrt(LLL u){
  15. LLL mid,l=1,r=1e18;
  16. while(l<=r){
  17. mid=(l+r)>>1;
  18. if(mid*mid==u){
  19. return mid;
  20. }
  21. else if(mid*mid<u){
  22. l=mid+1;
  23. }
  24. else{
  25. r=mid-1;
  26. }
  27. }
  28. return 0;
  29. }
  30. LLL div(LLL a,LLL b,LLL c){
  31. LLL _g=gcd(a,c);
  32. c/=_g;
  33. return (a/_g)*(b/c);
  34. }
  35. int t,k,n;
  36. LL g[10],l[10],ans[10];
  37. vector<LL>solve3(LLL g12,LLL g13,LLL g23,LLL l12,LLL l13,LLL l23){
  38. LLL ans1,ans2,ans3,x12,x13,x23;
  39. x12=g12*l12;
  40. x13=g13*l13;
  41. x23=g23*l23;
  42. ans1=sqrt(div(x12,x13,x23));
  43. ans2=sqrt(div(x12,x23,x13));
  44. ans3=sqrt(div(x23,x13,x12));
  45. if(ans1*ans2*ans3==0){
  46. return {};
  47. }
  48. if(gcd(ans1,ans2)==g12&&lcm(ans1,ans2)==l12&&
  49. gcd(ans2,ans3)==g23&&lcm(ans2,ans3)==l23&&
  50. gcd(ans1,ans3)==g13&&lcm(ans1,ans3)==l13){
  51. return {(LL)ans1,(LL)ans2,(LL)ans3};
  52. }
  53. else{
  54. return {};
  55. }
  56. }
  57. void solve(){
  58. if(k==2){
  59. ans[1]=g[1];ans[2]=l[1];
  60. }
  61. else if(k==3){
  62. for(int i=6;i;i--,next_permutation(g+1,g+4)){
  63. for(int j=6;j;j--,next_permutation(l+1,l+4)){
  64. auto rep=solve3(g[1],g[2],g[3],l[1],l[2],l[3]);
  65. if(rep.empty()){
  66. continue;
  67. }
  68. ans[1]=rep[0];ans[2]=rep[1];ans[3]=rep[2];
  69. return;
  70. }
  71. }
  72. }
  73. else{
  74. for(int i=720;i;i--,next_permutation(g+1,g+7)){
  75. for(int j=720;j;j--,next_permutation(l+1,l+7)){
  76. auto rep1=solve3(g[1],g[2],g[3],l[1],l[2],l[3]),rep2=solve3(g[1],g[4],g[5],l[1],l[4],l[5]);
  77. if(rep1.empty()||rep2.empty()){
  78. continue;
  79. }
  80. if(rep1[0]!=rep2[0]||rep1[1]!=rep2[1]){
  81. continue;
  82. }
  83. if(gcd(rep1[2],rep2[2])!=g[6]||lcm(rep1[2],rep2[2])!=l[6]){
  84. continue;
  85. }
  86. ans[1]=rep1[0];ans[2]=rep1[1];ans[3]=rep1[2];ans[4]=rep2[2];
  87. return;
  88. }
  89. }
  90. }
  91. }
  92. int main(){
  93. scanf("%d%d",&t,&k);
  94. n=(k-1)*k/2;
  95. while(t--){
  96. for(int i=1;i<=n;i++){
  97. scanf("%lld",&g[i]);
  98. }
  99. for(int i=1;i<=n;i++){
  100. scanf("%lld",&l[i]);
  101. }
  102. solve();
  103. for(int i=1;i<=k;i++){
  104. printf("%lld%c",ans[i]," \n"[i==k]);
  105. }
  106. }
  107. return 0;
  108. }

Luogu P5316 【恋恋的数学题】的更多相关文章

  1. 伯努利数学习笔记&&Luogu P3711 仓鼠的数学题

    新科技 Luogu P3711 题意 设$ S_{k,n}$表示$ \displaystyle\sum_{i=0}^n i^k$ 求多项式$\displaystyle\sum_{k=0}^n S_{k ...

  2. Luogu P3768 简单的数学题

    非常恶心的一道数学题,推式子推到吐血. 光是\(\gcd\)求和我还是会的,但是多了个\(ij\)是什么鬼东西. \[\sum_{i=1}^n\sum_{j=1}^nij\gcd(i,j)=\sum_ ...

  3. [Luogu 3768]简单的数学题

    Description 输入一个整数n和一个整数p,你需要求出$(\sum_{i=1}^n\sum_{j=1}^n ijgcd(i,j))~mod~p$,其中gcd(a,b)表示a与b的最大公约数. ...

  4. luogu 3708 koishi的数学题 递推 线性筛

    题目链接 题意 输入一个整数\(n\)\((n\leq 1e6)\),设\(f(x)=\sum_{i=1}^n x\mod i\),你需要输出\(f(1),f(2)...,f(n)\). 输入输出格式 ...

  5. luogu 3768 简单的数学题 (莫比乌斯反演+杜教筛)

    题目大意:略 洛谷传送门 杜教筛入门题? 以下都是常规套路的变形,不再过多解释 $\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{N}ijgcd(i,j)$ $\sum ...

  6. luogu P3768 简单的数学题 杜教筛 + 欧拉反演 + 逆元

    求 $\sum_{i=1}^{n}\sum_{j=1}^{n}ijgcd(i,j)$   考虑欧拉反演: $\sum_{d|n}\varphi(d)=n$   $\Rightarrow \sum_{i ...

  7. LUOGU P3708 koishi的数学题

    传送门 解题思路 发现当x+1时,有的x%i会+1,有的会变成0,而变成0的说明是x的约数,就可以nlogn预处理出每个约数的贡献,然后每次用n-约数. 代码 #include<iostream ...

  8. 沙雕题目 来自luogu

    P5316 恋恋的数学题 题目描述 现在恋恋正在处理的题目十分简单:现在有k (2≤k≤4)k \space (2\leq k\leq 4)k (2≤k≤4)个数,恋恋不知道它们分别是几,只知道它们两 ...

  9. luogu5316

    P5316 恋恋的数学题 题目背景 恋恋是个可爱的女孩子,最近她沉迷了做数学题. 题目描述 现在恋恋正在处理的题目十分简单:现在有k \space (2\leq k\leq 4)k (2≤k≤4)个数 ...

随机推荐

  1. mysql创建数据库命令

    CREATE DATABASE IF NOT EXISTS yourdbname DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

  2. Linux模拟控制网络时延

    之前以为可以使用Linux自带的工具模拟控制网络时延,所以上网找了一些资料.后来发现,找到的资料目前只支持在一个网卡上模拟发送报文的时延,而不能设置有差别的网络时延,或者说当要模拟的向A发送的时延与要 ...

  3. 并发包学习之-atomic包

    一,模拟并发代码: 线程不安全的代码 //并发模拟代码 public class CountExample { //请求总数 public static int clientTotal = 5000; ...

  4. 提高工作效率-window热键

    一.虚拟桌面 Ctrl win D          创建另一个桌面 Ctrl win  左右箭头     来回切换桌面 Ctrl win  F4     关闭当前虚拟桌面 二.窗口 win  M  ...

  5. 阿里云CodePipeline vs Jenkins

    产品概述_产品简介_CodePipeline-阿里云 https://help.aliyun.com/document_detail/56512.html CodePipeline管理控制台https ...

  6. Python + selenium + pycharm 环境部署细节 和selenium、Jenkins简单介绍

    一.测试体系:Python + selenium + pycharm + Jenkins/docker 环境搭建: 1.安装python 3.4/3.5 2/3.6/ 3.7 2.配置环境变量 3.p ...

  7. 移动端tap事件,消除300毫秒延迟

    引用这个之前,要讲一下首先我是用了webpack技术,所以你的项目如果没有用到这个的话,最好不要用这个技术,当然想用也可以,改下代码也可以用. 下面的代码直接复制就可以用啦. ( function(e ...

  8. 使用css控制文字显示几行并且剩余部分隐藏(移动端和PC端同样适用)

    前言 有些需求需要我们控制一段文本最多显示几行,就像逛淘宝京东的评价楼层一样,有时可能还需要隐藏剩余部分,这样的需求我们怎么来解决呢? 解决办法 我们完全可以使用css来解决这一需求 1. 解决文本显 ...

  9. PHP中stdClass的意义

    在WordPress中很多地方使用stdClass来定义一个对象(而通常是用数组的方式),然后使用get_object_vars来把定义的对象『转换』成数组. 如下代码所示:   1 2 3 4 5 ...

  10. qtp 自动化测试--点滴 菜单没有了,有些控件运行时找不到

    test项目页签下-没有了 菜单栏:file edit view insert 看不到了 1 解决:在startpage标签下-tool-option-点击 restore layout-确定 2 菜 ...