hdu-6237
A Simple Stone Game
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 1247 Accepted Submission(s): 287
The game goes like this: one player starts the game with N
piles of stones. There is ai
stones on the i
th pile. On one turn, the player can move exactly one stone from one pile to another pile. After one turn, if there exits a number x(x>1)
such that for each pile bi
is the multiple of x
where bi
is the number of stone of the this pile now), the game will stop. Now you need to help Bob to calculate the minimum turns he need to stop this boring game. You can regard that 0
is the multiple of any positive number.
, indicating the number of piles of stones.
The second line contains N
positive number, the i
th number ai(1≤ai≤100000)
indicating the number of stones of the i
th pile.
The sum of N
of all test cases is not exceed 5∗105
.
initially, you just need to output 0
. It's guaranteed that there exists at least one solution.
5
1 2 3 4 5
2
5 7
1
1 #include<iostream>
2 #include<string.h>
3 #include<algorithm>
4 #include <cstdio>
5 using namespace std;
6 typedef long long ll;
7 const int maxn = 1e5+10;
8 int nu[maxn];
9 int prim[maxn];
10 bool isprim[maxn];
11 int res[maxn];
12 int cop[maxn];
13 int len;
14 void euler(int maxx)
15 {
16 memset(isprim,true,sizeof(isprim));
17 isprim[1]=false;
18 len=0;
19 for(int i=2;i<=maxx;++i)
20 {
21 if(isprim[i]) prim[++len]=i;
22 for(int j=1;j<=len && i*prim[j]<=maxx;++j)
23 {
24 isprim[i*prim[j]]=false;
25 if(i%prim[j]==0) break;
26 }
27 }
28 }
29 int main()
30 {
31 euler(1e5);
32 int t;
33 scanf("%d",&t);
34 while(t--)
35 {
36 int n;
37 scanf("%d",&n);
38 ll sum=0;
39 for(int i=0;i<n;++i)
40 {
41 scanf("%d",&nu[i]);
42 sum+=nu[i];
43 }
44 sort(nu,nu+n);
45 ll ans = sum-nu[n-1];
46 int le=0;
47 for(int i=1;i<=len;++i)
48 {
49 if(sum%prim[i]==0)
50 {
51 res[++le]=prim[i];
52 while(sum%prim[i]==0)
53 sum/=prim[i];
54 }
55 }
56
57 for(int i=1;i<=le;++i)
58 {
59 // printf("%di ",res[i]);
60 for(int j=0;j<n;++j)
61 {
62 cop[j]=nu[j]%res[i];
63 // printf("%d ",cop[j]);
64 }
65 sort(cop,cop+n);
66 ll cnt=0;
67 int l=0,r=n-1;
68 while(l<r)
69 {
70 // printf("@");
71 if(cop[l]==0)
72 {
73 l++;
74 continue;
75 }
76 if(cop[l]+cop[r]==res[i])
77 {
78 cnt+=cop[l];
79 // printf("\n%d##\n",cnt);
80 l++;
81 r--;
82 }
83 else if(cop[l]+cop[r]<res[i])
84 {
85 cop[r]+=cop[l];
86 cnt+=cop[l];
87 l++;
88 }
89 else if(cop[l]+cop[r]>res[i])
90 {
91 cnt+=res[i]-cop[r];
92 cop[l]-=(res[i]-cop[r]);
93 r--;
94 }
95 }
96 // printf("\n%d##\n",cnt);
97 ans=min(cnt,ans);
98 // printf("\n%d###\n",ans);
99 }
100 printf("%lld\n",ans);
101 }
102 return 0;
103 }
hdu-6237的更多相关文章
- HDU 6237.A Simple Stone Game-欧拉函数找素因子 (2017中国大学生程序设计竞赛-哈尔滨站-重现赛)
A Simple Stone Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Ot ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- HDU 4006The kth great number(K大数 +小顶堆)
The kth great number Time Limit:1000MS Memory Limit:65768KB 64bit IO Format:%I64d & %I64 ...
- HDU 1796How many integers can you find(容斥原理)
How many integers can you find Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d ...
- hdu 4481 Time travel(高斯求期望)(转)
(转)http://blog.csdn.net/u013081425/article/details/39240021 http://acm.hdu.edu.cn/showproblem.php?pi ...
- HDU 3791二叉搜索树解题(解题报告)
1.题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=3791 2.参考解题 http://blog.csdn.net/u013447865/articl ...
- hdu 4329
problem:http://acm.hdu.edu.cn/showproblem.php?pid=4329 题意:模拟 a. p(r)= R'/i rel(r)=(1||0) R ...
随机推荐
- Java安全之Weblogic 2018-3248分析
Java安全之Weblogic 2018-3248分析 0x00 前言 基于前面的分析,后面的还是主要看补丁的绕过方式,这里就来简单的记录一下. 0x01 补丁分析 先来看看补丁细节 private ...
- 2021 Duilib最新入门教程(一)Duilib简介
目录 Duilib解决什么问题? 方案一.自己画界面 方案二.使用标准控件 方案三.使用Duilib框架 Duilib是什么? 先看下Duilib官方简介 再看下DirectUI 百度百科 比起介 ...
- Java 迭代器的使用 Iterator
Java的集合类可以使用for ... each循环 List Set Queue Deque 我们以List为例 其实一个java编译器并不知道如何遍历一个List 编译器只是把一个for ... ...
- javascript判断浏览器访问,刷新,返回
话不多说,直接上 if (window.performance.navigation.type === 0/* 正常访问 */) { // 你要干的事 } else if (window.perfor ...
- JVM虚拟机基础
JVM 全称Java Virtual Machine,也就是我们耳熟能详的Java 虚拟机.它能识别.class 后缀的文件,并且能够解析它的指令,最终调用操作系统上的函数,完成我们想要的操作. Ja ...
- css选择器有哪些,选择器的权重的优先级
选择器类型 1.ID #id 2.class .class 3.标签 p 4.通用 * 5.属性 [type="text"] 6.伪类 :hover 7.伪元素 ::first-l ...
- Python中单引号,双引号,三引号的区别
Python中的字符串一般用单引号('A'),双引号("A")和三引号('''A''')或者("""A""") 1.单引 ...
- LOJ10145郁闷的出纳员
传送门:https://loj.ac/problem/10145 简单的平衡树 ------------------------------------ 1 #include<bits/stdc ...
- Language Guide (proto3) | proto3 语言指南(一)定义消息类型
定义消息类型 首先让我们看一个非常简单的例子.假设您想定义一个搜索请求消息格式,其中每个搜索请求都有一个查询字符串.您感兴趣的特定结果页以及每页的结果数.下面是用于定义.proto消息类型的文件. s ...
- 静默安装Oracle也没那么恐怖
几种必须静默安装的情况 服务器为了减少资源占用,没安装图形组件 不能进入机房,只能远程SSH 想炫(Z)耀(B),静默安装显得有技术含量 磁盘分区要求 如没有特别要求,装机时可按如下分区比较好管理 / ...