hdoj 6237 A Simple Stone Game
来源:互联网 发布:声鉴软件下载 编辑:程序博客网 时间:2024/06/06 02:48
题目链接:A Simple Stone Game
题目大意:有n堆石头,你每次可以将一堆石头里面的一个移动到另一堆里面,问最少需要多少次可以使得所有石头堆的数量都可以被某一个数整除
题目思路:因为我们只能移动石头,所以所有石头堆的总数一定是固定的,所以最后找到的数一定是总数的某一个因子,然后枚举每一个素因子,然后找这个素因子需要移动的数量,我们只需要对这个素因子求余然后从大到小排序然后对每个石头堆补完素数因子就好了(因为要移动的石头最少,所以补大的,而且剩下的总和一定是这个素因子的倍数,那么一定能补完),然后找所有素因子里面最小的移动步数就好了
时间复杂度&&空间复杂度:O(2n*cnt)&&O(n)(cnt为素因子个数)
#include <map>#include <set>#include <cmath>#include <vector>#include <cstdio>#include <cstring>#include <cstdlib>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;const int maxn = 5e5+10;ll a[maxn],phi[maxn],mo[maxn];ll sum,cnt;bool cmp(ll a,ll b){return a > b;}void init(){ cnt = 0; for(ll i = 2;i*i <= sum;i++){ if(sum%i == 0) phi[cnt++] = i; while(sum%i == 0) sum /= i; } phi[cnt++] = sum;}int main(){ ll T,n,minn,num; scanf("%lld",&T); while(T--){ scanf("%lld",&n); sum = 0; for(ll i = 0;i < n;i++){ scanf("%lld",&a[i]); sum += a[i]; } init(); minn = 1e10+10; for(ll j = 0;j < cnt;j++){ num = 0; for(ll i = 0;i < n;i++) mo[i] = a[i]%phi[j],num += mo[i]; ll ret = 0; sort(mo,mo+n,cmp); ll i = 0; while(num > 0&&i < n){ ret += phi[j]-mo[i]; num -= phi[j]; i++; } minn = min(minn,ret); } printf("%lld\n",minn); } return 0;}
阅读全文
0 0
- hdoj 6237 A Simple Stone Game
- HDU 6237 A Simple Stone Game
- hdu2486 A simple stone game
- HDU_2580 A simple stone game
- hdu2580 a simple stone game
- hdu A Simple Stone Game
- HDU-6237:A Simple Stone Game(数论)
- hdu 6237 A Simple Stone Game (求素因子+贪心)
- HDU-6237 A Simple Stone Game (素数筛 + 贪心)
- HDOJ 题目2486 A simple stone game(K倍动态减法游戏,模板)
- POJ 3922 A simple stone game
- 【转】POJ 3922 A simple stone game
- POJ 3922 A simple stone game
- A simple stone game (poj3922,博弈)
- hdu 2486 A simple stone game
- HDU2486 A simple stone game 博弈论
- 【hdu 2486】A simple stone game
- HDU 6237/2017CCPC哈尔滨 A Simple Stone Game【质因子】
- ROS学习笔记(九)
- 处理棋盘格贴图四方连续问题
- 自学Python之Python基础:(二)Python容器:列表、元组、字典
- sys:treeselect 树型框 获取制定ID
- HDOJ-3068 最长回文 (manacher求最长回文串)
- hdoj 6237 A Simple Stone Game
- js获取url传递参数,js获取url?号后面的参数window.location
- php根据时间调用不同商务通js
- java程序员从笨鸟到菜鸟之(三十九)多态之this和super
- Swift-泛型学习和实例总结
- 文本编码&二进制运算
- mysql数据库导出命令
- asterisk服务器的搭建和配置
- 多还信用卡也会影响征信被拒贷款,可能出现了呆账!