Large Refrigerator

CodeForces - 163D

给定一个长方体的体积V,求出这个长方体的最小表面积。

输入

第一行有一个整数t (1 ≤ t ≤ 500) — 测试数据的组数。

下面是t组测试数据。每一组表示一个整数V (2 ≤ V ≤ 1018),通过分解质因数的形式给出。

V = p1a1p2a2... pkak,其中pi 是不同的素数,ai是正整指数。

第一行给出一个正整数k — V中不同的质因子的个数。下面k行每行两个数字:piai,用空格隔开。每一个pi都是不同的。所有ai > 0。

输出

输出t 行,在第i行输出第i-组测试数据的答案,其中包含4个空格隔开的数:最小表面积S和对应的长宽高的长度abc。如果有多个答案,输出任意。长宽高顺序没有规定。

样例

输入
  1. 3
    1
    2 3
    1
    17 1
    3
    3 1
    2 3
    5 1
输出
  1. 24 2 2 2
    70 1 1 17
    148 4 6 5

注释

在第一个测试数据中体积V = 23 = 8,最小表面积可由三边相等的正方体构成。

在第二个测试数据中体积V = 17,该长方体只有一种构成方法。

sol:直接爆搜会T出屎,所以要剪枝,我就XJB剪了一下,先搜a再搜b,强制a<b<c,还有中间如果体积已经超出了就退出,然后就过了

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef unsigned long long ll;
  4. inline ll read()
  5. {
  6. ll s=;
  7. bool f=;
  8. char ch=' ';
  9. while(!isdigit(ch))
  10. {
  11. f|=(ch=='-'); ch=getchar();
  12. }
  13. while(isdigit(ch))
  14. {
  15. s=(s<<)+(s<<)+(ch^); ch=getchar();
  16. }
  17. return (f)?(-s):(s);
  18. }
  19. #define R(x) x=read()
  20. inline void write(ll x)
  21. {
  22. if(x<)
  23. {
  24. putchar('-'); x=-x;
  25. }
  26. if(x<)
  27. {
  28. putchar(x+''); return;
  29. }
  30. write(x/);
  31. putchar((x%)+'');
  32. return;
  33. }
  34. #define W(x) write(x),putchar(' ')
  35. #define Wl(x) write(x),putchar('\n')
  36. const int N=;
  37. const ll inf=0x7fffffffffffffffll;
  38. int T,n,tot=;
  39. struct Node
  40. {
  41. ll p,a;
  42. inline bool operator<(const Node &tmp)const
  43. {
  44. return p<tmp.p;
  45. }
  46. }Num[N];
  47. ll P[N],A[N],V,ans,aa,bb,cc;
  48. inline ll Ksm(ll x,ll y)
  49. {
  50. ll Res=;
  51. while(y)
  52. {
  53. if(y&) Res=1ll*Res*x; x=1ll*x*x; y>>=;
  54. }
  55. return Res;
  56. }
  57. inline bool Judge(ll a)
  58. {
  59. return (1ll*(sqrt(V/a)**a+V/a)<=ans);
  60. }
  61. inline void dfs(int Now,ll a);
  62. inline void dfs1(int Now,ll a,ll b);
  63. inline void dfs(int Now,ll a)
  64. {
  65. if(a*a*a>V) return;
  66. if(Now==n+)
  67. {
  68. if(Judge(a)) dfs1(,a,);
  69. return;
  70. }
  71. int i;
  72. ll tmp=Ksm(P[Now],A[Now]);
  73. for(i=A[Now];i>=;i--)
  74. {
  75. A[Now]-=i;
  76. dfs(Now+,a*tmp);
  77. A[Now]+=i;
  78. tmp/=P[Now];
  79. }
  80. dfs(Now+,a);
  81. }
  82. inline void dfs1(int Now,ll a,ll b)
  83. {
  84. if(a*b*b>V) return;
  85. if(Now==n+)
  86. {
  87. ll c=V/a/b,tmp; tmp=a*b+a*c+b*c;
  88. if(tmp<ans)
  89. {
  90. ans=tmp; aa=a; bb=b; cc=c;
  91. }
  92. return;
  93. }
  94. int i;
  95. ll tmp=Ksm(P[Now],A[Now]);
  96. for(i=A[Now];i>=;i--)
  97. {
  98. A[Now]-=i;
  99. dfs1(Now+,a,b*tmp);
  100. A[Now]+=i;
  101. tmp/=P[Now];
  102. }
  103. dfs1(Now+,a,b);
  104. }
  105. int main()
  106. {
  107. int i;
  108. R(T);
  109. while(T--)
  110. {
  111. V=; ans=inf; R(n); tot=;
  112. for(i=;i<=n;i++)
  113. {
  114. R(Num[++tot].p); R(Num[tot].a); V*=Ksm(Num[tot].p,Num[tot].a);
  115. }
  116. sort(Num+,Num+tot+);
  117. for(i=;i<=tot;i++) {P[i]=Num[i].p; A[i]=Num[i].a;}
  118. dfs(,);
  119. W(1ll*ans*); W(aa); W(bb); Wl(cc);
  120. }
  121. return ;
  122. }
  123. /*
  124. Input
  125. 4
  126. 1
  127. 2 3
  128. 1
  129. 17 1
  130. 3
  131. 3 1
  132. 2 3
  133. 5 1
  134. 1
  135. 2 2
  136. Output
  137. 24 2 2 2
  138. 70 1 1 17
  139. 148 4 6 5
  140. 16 2 2 1
  141.  
  142. input
  143. 3
  144. 4
  145. 208513 1
  146. 2 1
  147. 10753058401 1
  148. 223 1
  149. 4
  150. 17469877 1
  151. 1283 1
  152. 949261 1
  153. 47 1
  154. 4
  155. 313 1
  156. 2 1
  157. 1546412477693 1
  158. 1033 1
  159. output
  160. 4493896846822714 446 208513 10753058401
  161. 35388330702870 60301 949261 17469877
  162. 5130996602278690 626 1033 1546412477693
  163. */

codeforces163D的更多相关文章

随机推荐

  1. 怎样获取Cookie

    使用 document.cookie 获取; document.cookie

  2. CSS用户界面样式之cursor/outline/resize

    1. 鼠标样式cursor 检测鼠标指针在对象上移动的鼠标指针采用何种系统预定于的光标形状 常用属性: default 小白 hands小手 /pointer move移动 text文本 2. 轮廓 ...

  3. django form 和modelform样式设置

      目录 1.form通过attr设置属性 2.输入框设置表单状态 3.modelform的使用 4.结合modelform 使用for循环生成输入框 5.基于init构造方法设置样式 6.基本增删改 ...

  4. easyUi 的form和validate组件

    以下代码不能运行,只是我在学习过程中记录的笔记,但代码可以用!!! 可以按照需要截取. <%@ page language="java" contentType=" ...

  5. Browser Security-超文本标记语言(HTML)

    Browser Security-超文本标记语言(HTML) 瞌睡龙 · 2013/06/19 18:55 重要的4个规则: 1 &符号不应该出现在HTML的大部分节点中. 2 尖括号< ...

  6. 【坑】Spring中抽象父类属性注入,子类调用父类方法使用父类注入属性

    运行环境 idea 2017.1.1 spring 3.2.9.RELEASE 需求背景 需要实现一个功能,该功能有2个场景A.B,大同小异 抽象一个抽象基类Base,实现了基本相同的方法BaseMe ...

  7. openstack 平台P2V迁移

    目录 [Openstack]P2V迁移 一.前言 二.前提准备 三.操作步骤 1.安装迁移中转机 2.配置中转机 3.创建存储池(可选) 4.制作virt-p2v的 U盘引导启动工具 5.操作物理机, ...

  8. etcd简单测试类java版

    为了方便现场安装完了etcd集群后确认集群是否好用,简单写了个测试类,网上搜的有点乱还有些不能运行,在这里再整理一个能够直接运行的 1.我把etcd的API设成3版本了,调用使用的jetcd,功能挺多 ...

  9. SpringCloud01——服务的注册和发现

    SpringCloud01--服务的注册和发现 一.微服务的注册和发现 我们在微服务中,往往有服务提供者,服务消费者和服务注册中心.我们之前学习的Zookeeper就是一个注册中心.但是在官方的Spr ...

  10. Ubuntu系统---安装Caffe (+OpenCV+Python+CPU-only)

    安装配置Ubuntu14.04+Caffe (+OpenCV+Python+CPU-only) 记录 [作者:Wu Ping.时间:20180428.] 本人已经安装很多次的Caffe了:从开始的初探 ...