近似乘积

jzoj 3925

题目大意

给你一个集合A和n让你求不在集合A内的x、y、z,使∣n−x×y×z∣|n-x×y×z|∣n−x×y×z∣最小

输入样例

3
2 2 4
4
1 1
7
2 1 15
90

输出样例

1 1 3
2 2 2
2 5 9

数据范围

40% 的数据:1⩽m⩽10,1⩽n⩽100.1 \leqslant m\leqslant 10,1 \leqslant n \leqslant 100.1⩽m⩽10,1⩽n⩽100.
70% 的数据:1⩽m,n⩽1000.1 \leqslant m, n \leqslant 1000.1⩽m,n⩽1000.
100% 的数据:1⩽m,n,Ai⩽106,1⩽T⩽4.1 \leqslant m, n, Ai \leqslant 10^6,1 \leqslant T \leqslant 4.1⩽m,n,Ai⩽106,1⩽T⩽4.

解题思路

我们可以直接枚举x和y然后z用n除x和y来求
我们保证x×y小于n
因为x×y大于n,那x×y×z-n就大于x×x×z-n了(x<y)
如果x=y且x×x>n那在外面在判断一次就行了(具体看代码)

代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
ll t, n, m, w, x, y, z1, z2, ans, ansa, ansb, ansc, next, last, p[2000500], a[2000500], nx[2000500], ls[2000500];
int main()
{scanf("%lld", &t);while(t--){memset(p, 0, sizeof(p));w = 0;scanf("%lld", &m);for (ll i = 1; i <= m; ++i){scanf("%lld", &x);p[x] = 1;//不能选}scanf("%lld", &n);for (ll i = 1; i <= n; ++i){if (!p[i]) a[++w] = i, last = i;//a是n之内能选的ls[i] = last;//上一个可以选的}if (!w) a[1] = 2000010;for (ll i = n * 2 + 10; i > 0; --i){if (!p[i]){next = i;if (!w) a[1] = min(a[1], i);//如果n之内没有能选的就选一个最小的n之外的能选的}nx[i] = next;//下一个能选的}if (!w) w = 1;ans = (n * 2 + 10) * (n * 2 + 10) * (n * 2 + 10);for (ll i = 1; i <= w; ++i)for (ll j = i; i * j <= w; ++j){x = a[i];y = a[j];z1 = ls[n / (x * y)];//往左对齐z2 = nx[n / (x * y) + 1];//往右对齐if (z1 > 0 && !p[z1] && abs(n - x * y * z1) <= ans)//z可以选,且更优{if (abs(n - x * y * z1) < ans || x < ansa || x == ansa && y < ansb || x == ansa && y == ansb && z1 < ansc)//ans更优或答案更优{ansa = x;ansb = y;ansc = z1;}ans = abs(n - x * y * z1);}if (z2 > 0 && !p[z2] && abs(n - x * y * z2) <= ans)//同上{if (abs(n - x * y * z2) < ans || x < ansa || x == ansa && y < ansb || x == ansa && y == ansb && z2 < ansc){ansa = x;ansb = y;ansc = z2;}ans = abs(n - x * y * z2);}}if (abs(n - a[1] * a[1] * a[1]) <= ans)//保证有答案{if (abs(n - a[1] * a[1] * a[1]) < ans || a[1] < ansa || a[1] == ansa && a[1] < ansb || a[1] == ansa && a[1] == ansb && a[1] < ansc){ansa = a[1];ansb = a[1];ansc = a[1];}ans = abs(n - a[1] * a[1] * a[1]);}printf("%d %d %d\n", ansa, ansb, ansc);}return 0;
}

近似乘积(jzoj 3925)相关推荐

  1. 纪中B组模拟赛总结(2020.2.09)

    成绩 rankrankrank namenamename scorescorescore T1T1T1 T2T2T2 T3T3T3 666 lyflyflyf 120120120 303030 000 ...

  2. RealTimeRayTracing:光追降噪[1]--UE4中的光追降噪

    目录 UE4中的光追降噪: 主要思想: Shadow 降噪: Glossy反射降噪: AO和Diffuse GI 降噪: 前记:主要是前几天看到了一个问题就是光追怎么降噪,毕竟在实时渲染中光追不可能采 ...

  3. 通过可视化图了解您的 Spark 应用程序

    过去,Apache Spark UI 在帮助用户调试应用程序方面发挥了重要作用.在最新的 Spark 1.4 版本中,我们很高兴地宣布数据可视化浪潮已经进入 Spark UI.此版本中新增的可视化功能 ...

  4. word2vec损失函数的数学推导和近似训练以及doc2vec的实战掉包应用

    更新: 9/4/20 做了关于SG模型最后计算loss的一些补充.对doc2vec损失计算部分出现的错误进行了订正. 11/17/20 补充了部分近似训练的内容. 词义表示 在NLP中,最基础的问题就 ...

  5. 上海交大:基于近似随机Dropout的LSTM训练加速

    机器之心发布 作者:宋卓然.王儒.茹栋宇.彭正皓.蒋力 上海交通大学 在这篇文章中,作者利用 Dropout 方法在神经网络训练过程中产生大量的稀疏性进行神经网络的训练加速.该论文已经被 Design ...

  6. UA MATH564 概率论VI 数理统计基础3 卡方分布的正态近似

    UA MATH564 概率论VI 数理统计基础3 卡方分布的正态近似 卡方分布的正态近似 Gamma分布的正态近似 基于卡方分布的近似 基于指数分布的近似 在做UA MATH566 统计理论 QE练习 ...

  7. 近似推断包括采样和变分两种方法,前者是通过_____进行近似,后者是通过_______进行近似。

    Single Choice (1 point) 近似推断包括采样和变分两种方法,前者是通过_____进行近似,后者是通过_______进行近似. 采样来对目标分布的期望; 把多个变量的积的求和问题转换 ...

  8. 【论文解读】深度强化学习基石论文:函数近似的策略梯度方法

     导读:这篇是1999 年Richard Sutton 在强化学习领域中的经典论文,论文证明了策略梯度定理和在用函数近似 Q 值时策略梯度定理依然成立,本论文奠定了后续以深度强化学习策略梯度方法的基石 ...

  9. 7.4.1 矩阵低秩近似、矩阵范数

    矩阵低秩近似.矩阵范数 根据奇异值分解,秩为 rrr 的任意矩阵 AAA 可分解为 rrr 个简单矩阵(秩为 111) σiuiviT\sigma_i\mathbf{u}_i\mathbf{v}^T_ ...

最新文章

  1. 【原创】C# API 未能创建 SSL/TLS 安全通道 问题解决
  2. Oracle Database 12c DBA文官手册(第8版)——第5章 开发和实现应用程序
  3. sql语句or与union all的执行效率比较
  4. 谈谈对java中分层的理解_让我们谈谈网页设计中的卡片设计
  5. By Elevator or Stairs? CodeForces - 1249E(动态规划)
  6. MySQL中使用CASE出错,如何在MySQL中正确使用CASE..WHEN
  7. python-Python 函数
  8. C++关键字 friend
  9. 计算机科学渗透信息论的思想,认知主义理论
  10. 虚拟交换系统 (VSS)
  11. AJAX IE7清除缓存
  12. [落选]2021微信大数据挑战赛_总结
  13. Ubuntu18.04安装win7虚拟机
  14. SpringBoot系列之(三):启动过程
  15. 大话设计模式 第二十三章 命令模式 考羊肉串
  16. 张鹏:腾讯云直播PCDN加速方案(附视频回放)
  17. 函数极限和无穷大 函数各种情况极限的定义
  18. 上位机plc编程入门_【新手入门】西门子PLC编程入门学习
  19. 计算机的喇叭接口显示的英文,电脑上喇叭图标不见了怎么找到(电脑不显示扬声器图标的解决方法)...
  20. rmmod: can't change directory to '/lib/modules': No such file or directory

热门文章

  1. tomcat如何修改java版本_Java程序员必备——Tomcat配置技巧Top10
  2. 连接mysql数据库2013_使用VS2013 + EF6 + .NET4.5 连接Mysql数据库
  3. netty springmvc_springmvc源码架构解析之HandlerMapping
  4. python购物车典例_Python入门:购物车实例
  5. 大曾幽默打油诗_这才是真正的幽默打油诗,逗人一笑,又引人深思!
  6. 总结定时器设计方法_钢结构刚性固定钢柱脚设计方法总结,看完不仅懂操作,还懂了原理...
  7. Sequence II (HDU 5919)(主席树)
  8. 2019 ICPC World Finals Problem B. Beautiful Bridges
  9. 牛客题霸 [二进制中1的个数] C++题解/答案
  10. [AtCoder Regular Contest 060] E - Tak and Hotels