UVA 1642 Magical GCD (思路+哈希map)
来源:互联网 发布:c语言如何输出汉字 编辑:程序博客网 时间:2024/06/01 07:17
大体题意:
给你n 个整数(n <= 1e5)要求选择一个连续的子序列,使得gcd * 长度 最大?
思路:
按照刘汝佳分析做的,加入一个数后,给它的所有后缀的gcd 打一个表,gcd 相同的 保留长度大的,其余的全部删除。
那么这个表中元素数量最大是log2 j 个,很小的一个数。
因此随便做了,但是不能用有序的stl 如set 还是会超时。
用两个Hash map 来会导就可以了。
#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include <vector>#include <unordered_map>#define Max(a,b) ((a)>(b)?(a):(b))#define ps push_back#define fi first#define se second#define Siz(x) (int)x.size()using namespace std;typedef long long LL;const int maxn = 1e5 + 10;LL gcd(LL a,LL b){ return !b ? a : gcd(b,a%b);}LL a[maxn];LL b[maxn];unordered_map <LL,int>mp,mp2;unordered_map<LL,int>::iterator it;int T, n;int main(){ scanf("%d",&T); while(T--){ LL ans = 0; mp.clear(); scanf("%d",&n); for (int i = 1; i <= n; ++i){ scanf("%lld",a+i); ans = Max(ans,a[i]); } mp[a[1] ] = 1; for (int i = 2; i <= n; ++i){ int cnt = 0; mp2.clear(); for (it = mp.begin(); it != mp.end();++it){ LL ng = gcd(it->fi, a[i]); LL nlen = it->se + 1; if (!mp2.count(ng)){ mp2[ng] = nlen; ans = Max(ans,nlen*ng); } else { if (mp2[ng] < nlen){ mp2[ng] = nlen; ans = Max(ans,nlen*ng); } else ans = Max(ans,mp2[ng]*ng); } } if (!mp2.count(a[i]))mp2[a[i] ] = 1; mp = mp2; } printf("%lld\n",ans); } return 0;}/**2530 60 20 20 2042 2 3 4ans = 80**/
0 0
- UVA 1642 Magical GCD (思路+哈希map)
- [UVa 1642]Magical GCD STL map遍历
- UVA 1642(p340)----Magical GCD
- UVA 1642 Magical GCD 暴力+簡單數論
- UVA Magical GCD
- Magical GCD UVA
- UVa1642 Magical GCD-(最大权值子段和->map)
- 1642 - Magical GCD (数论)
- UVA 11388 GCD LCM(思路)
- Magical GCD
- UVA - 1642 Magical GCD(nlogn传统算法思想 序列较短的维护队列)
- gcd,高效(魔法GCD,uva 1642)
- hdu 4941 Magical Forest (map容器)
- UVALive 6582 Magical GCD
- UVALive 6582 Magical GCD
- 【CERC2013】【BZOJ4052】Magical GCD
- 【CERC2013】bzoj4052 Magical GCD
- 【JZOJ3780】Magical GCD
- 数组中插入一个数
- [Spring实战系列]
- springmvc常用注解标签详解
- 从贝叶斯方法谈到贝叶斯网络
- Qunar React Native 实践
- UVA 1642 Magical GCD (思路+哈希map)
- 蚂蚁笔记的快捷键
- MySQL视图
- python中时间日期格式化符号
- css设定文本超出一行或多行就隐藏并显示省略号
- Jeewx-api 1.1 版本发布,微信极速 SDK
- HDU4707:Pet(DFS求树深)
- Linux下用GDB调试程序崩溃错误
- boolan——c++学习笔记之STL简介