题干:

After he has learned how to play Nim game, Bob begins to try another stone game which seems much easier.

The game goes like this: one player starts the game with NN piles of stones. There is aiai stones on the iith 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)x(x>1) such that for each pile bibi is the multiple of xx where bibi 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 00 is the multiple of any positive number.

Input

The first line is the number of test cases. For each test case, the first line contains one positive number N(1≤N≤100000)N(1≤N≤100000), indicating the number of piles of stones.

The second line contains NN positive number, the iith number ai(1≤ai≤100000)ai(1≤ai≤100000) indicating the number of stones of the iith pile.

The sum of NN of all test cases is not exceed 5∗1055∗105.

Output

For each test case, output a integer donating the answer as described above. If there exist a satisfied number xx initially, you just need to output 00. It's guaranteed that there exists at least one solution.

Sample Input

2
5
1 2 3 4 5
2
5 7

Sample Output

2
1

题目大意:

玩一个游戏,有n堆石头,每堆石头有a[i]个,每次你能将一堆石头的一个放到其他堆,当存在一个x使得所有的a[i]%x==0,游戏结束,输出游戏进行的最小次数。(n,a[i]<=1e5)

解题报告:

首先这个x可以进行缩减,如果x的倍数是可以的,那x一定是可以的,也就是说我们只需要考虑x是质数就可以了。

那么1e5个数,每个数的质因子还是特别的多的,其实我们也不需要考虑这么多数字,想想他既然有解,说明他x一定可以整数所有数,所以我们不需要分别看这n个数,只需要看看,这n个数的和就可以了。不难发现这个和<=1e10,所以我们可以先求和,然后对和进行质因子分解(不超过10个),然后枚举这些质因子。

对于接下来的处理,首先对枚举的这个数x取模一下,因为剩下的那些数都是没啥用的,然后可以贪心构造,每次都让小的摞到高的上,这样一定可以保证移动次数最少,其实不难发现不可能存在某一堆中移动>x个石子到另一堆上,因为这样相当于没有省略,所以其中x那一部分可以不用挪动,又因为保证有解,所以一定是可以移动过去的。另一种方法是因为给定了总和,给定了x,我们就知道最终要凑出几个堆来,假设需要凑出k堆,所以我们对%x后的值排个序,可以贪心选取前k大的元素,看还需要凑多少出来即可。(代码实现没有讨论的这么麻烦,但是感觉这题还是需要一个严谨的思维过程的wjhnb)

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define FF first
#define SS second
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
typedef pair<int,int> PII;
const int MAX = 1e5 + 5;
bool is[MAX];
ll a[MAX],b[MAX];
int cnt;
ll prime[MAX],ans;
void init() {memset(is,1,sizeof is);is[1]=is[0]=0;for(int i = 2; i<MAX; i++) {if(is[i] == 0) continue;prime[++cnt] = i;for(int j = i+i; j<MAX; j+=i)  is[j]=0;}
}
vector<ll> vv;
void fj(ll x) {for(int i = 1; i<=cnt; i++) {if(x % prime[i] == 0) {vv.pb(prime[i]);while(x%prime[i] == 0) x /= prime[i];}}if(x>1) vv.pb(x);
}
int main()
{init();int T,n;cin>>T;while(T--) {scanf("%d",&n);ll sum = 0;vv.clear();ans=1e18;for(int i = 1; i<=n; i++) scanf("%lld",a+i),sum += a[i];fj(sum);for(auto x : vv) {ll tmp = 0,tt=0;for(int i = 1; i<=n; i++) {b[i] = a[i]%x;tt += b[i];}sort(b+1,b+n+1);ll zu = tt/x;for(int i = n; i>=n-zu+1; i--) tmp += x - (b[i]);ans = min(ans,tmp); }printf("%lld\n",ans);}return 0 ;
}

【HDU - 6237】A Simple Stone Game(贪心,思维,素因子分解,数学)相关推荐

  1. 贪心/思维题 UVA 11292 The Dragon of Loowater

    题目传送门 1 /* 2 题意:n个头,m个士兵,问能否砍掉n个头 3 贪心/思维题:两个数组升序排序,用最弱的士兵砍掉当前的头 4 */ 5 #include <cstdio> 6 #i ...

  2. 1450F The Struggling Contestant(贪心+思维)

    1450F The Struggling Contestant(贪心+思维) Codeforces Global Round 12 F. The Struggling Contestant 题面:Th ...

  3. cf:B. Patchouli‘s Magical Talisman【数学贪心思维 + 奇偶分析】

    分析 给出一堆数 可以通过相加或除2让它们全部变成奇数 如果全奇数返回0 由于奇数 + 偶数 = 奇数 所以只要有一个奇数就能把偶数和它相加不停的变成奇数 所以只要存在奇数,就可以返回偶数的个数 否则 ...

  4. 《C语言程序设计实践》————如何买玫瑰?(贪心思维)

    <C语言程序设计实践>----如何买玫瑰?(贪心思维) 要求:小慧过生日,小明要买玫瑰送她.每枝红玫瑰5元,满5支送1枝,满20枝送5枝.小明一共有n(n>10)元钱,最多能买到多少 ...

  5. 计算机思维与数学思维的本质区别

    计算机思维和数学思维,都包括了抽象和逻辑. 数学的抽象,在于剥离具体.数学研究从公理出发,可以变成纯思维的活动,和具体的的现实脱离关系.数学上的人为"定义",就是为了尽可能给出范围 ...

  6. 笛卡尔的思维法则(数学思维的规范)

    笛卡尔的思维法则(数学思维的规范) 法则一 研究的目的应该是将思维引向对它面前出现的一切材料作出 有充分根据的正确判断的清晰理论. 法则二 只有思维能力看上去能够对它们获得确实而无容质疑的知识 的那些 ...

  7. 幼儿抽象逻辑思维举例_哈啰思维幼儿数学逻辑思维app下载-哈啰思维幼儿数学逻辑思维手机版 v1.0.1...

    哈啰思维幼儿数学逻辑思维app是专为孩子量身打造的一款学习软件,它能够帮助2岁到8岁的儿童提供精品的启蒙教育课程,各种综合.概况.抽象.比较.具体化的课程随时选择,能够帮助孩子轻松提升自己,同时开发孩 ...

  8. HDU - 5242 Game(树形dp+树链剖分/树上贪心+思维)

    题目链接:点击查看 题目大意:给出一棵包含n个节点的树,每个节点都有一个权值,整棵树的根是点1,问从点1开始向下一直走到叶子节点,可以走k次,怎么样走权值和最大,每个节点被走过一次后权值会变为0 题目 ...

  9. HDU - 6438(贪心+思维)

    链接:HDU - 6438 题意:给出 n ,表示 n 天.给出 n 个数,a[i] 表示第 i 天,物品的价格是多少.每天可以选择买一个物品,或者卖一个已有物品,也可以什么都不做,问最后最大能赚多少 ...

最新文章

  1. 关于SQL的基础知识点
  2. 虚拟机 克隆:完整克隆 模式
  3. 《数据结构与算法分析:C语言描述》复习——第十章“算法设计技巧”——Minimax策略...
  4. 【java】静态代码块
  5. uboot nand erase 的显示错误修复
  6. 哪里的草莓质量又好又便宜呢?水果批发市场(前提你买的得多)
  7. Oracle Minus 取差集
  8. Swift 和 Objective-C 混编
  9. InnoDB索引原理详解
  10. Mongo集群分片部署实践(4.2版本)
  11. mysql密码自动被改_每日一shell(十一)mysql强制自动修改密码
  12. 使用PDF-XChange Editor为PDF文件添加图章(仅图片)
  13. 微型计算机的现状历史未来,微型计算机的发展历史、现状和未来
  14. [3]2020-IEEE Access-Batch Active Learning With Two-Stage Sampling 论文笔记
  15. 2.1 机器中数据的存储
  16. 物理内存管理之zone详解
  17. Setup Factory打包winform程序
  18. 流式上传文件到服务器磁盘,通过HTTP将数据从浏览器流式传输到服务器的方法...
  19. React Native Navigation
  20. nodejs和前端基于websocket实现微信群聊与私聊

热门文章

  1. Oracle高级SQL培训与讲解
  2. 基于知识图谱的问答系统实践
  3. [剑指offer]面试题第[47]题[JAVA][礼物的最大价值][动态规划]
  4. [剑指offer]面试题第[55-1]题[JAVA][二叉树的深度][BFS][DFS]
  5. python抢货程序_Python自动化xpath实现自动抢票抢货代码示例
  6. 微信开发者工具 wxmi修改模版颜色_网站建设公司讲解:微信小程序的开发者工具界面...
  7. php pdo 00000,php-即使有错误,PDO错误代码也总是00000
  8. java io体系_java IO流的体系结构图
  9. mysql导出表_mysql导出表的3种方式
  10. python设计自定义栈类_Python如何自定义模块?Python基础教程,第十讲,自定义模块...