Codeforces Round #323 (Div. 2) C. GCD Table
2015-10-04 13:45
309 查看
C. GCD Table
题目链接:
http://codeforces.com/contest/583/problem/C
题意是给你n个数,可以构成n*n的GCD矩阵,矩阵里的元素顺序可以是任意的,让你求出这n个数...
首先我们能想到矩阵中最大的数就是答案,本身和本身的GCD就是本身(奇数个),而两个不同数的GCD会产生两个相同的GCD,可以发现矩阵中对角线就是答案...
所以我们可以取目前最大的数,让这个数和之前取到的数GCD一下,产生两个GCD数,然后从矩阵中删除...
下面是我的代码:
题目链接:
http://codeforces.com/contest/583/problem/C
题意是给你n个数,可以构成n*n的GCD矩阵,矩阵里的元素顺序可以是任意的,让你求出这n个数...
首先我们能想到矩阵中最大的数就是答案,本身和本身的GCD就是本身(奇数个),而两个不同数的GCD会产生两个相同的GCD,可以发现矩阵中对角线就是答案...
所以我们可以取目前最大的数,让这个数和之前取到的数GCD一下,产生两个GCD数,然后从矩阵中删除...
下面是我的代码:
#include <cstdio> #include <iostream> #include <algorithm> #include <vector> #include <map> using namespace std; const int MAXN = 250010; int a[MAXN]; map<int , int>mymap; vector<int> myv; bool cmp(int x , int y) { return x > y; } int GCD(int x , int y) { int temp; while(y) { temp = y; y = x % y; x = temp; } return x; } int main() { int n; while(~scanf("%d" , &n)) { for(int i = 0 ; i < n*n ; i++) { scanf("%d" , a + i); mymap[a[i]]++; } sort(a , a + n*n , cmp); for(int i = 0 ; i < n*n ; i++) { if(mymap[a[i]]) { mymap[a[i]]--; for(int j = 0 ; j < myv.size() ; j++) { mymap[GCD(a[i] , myv[j])] -= 2; } myv.push_back(a[i]); } } for(int i = 0 ; i < myv.size() - 1 ; i++) cout << myv[i] << " "; cout << myv[myv.size() - 1] << endl; } }
相关文章推荐
- CCS3.3的使用1
- pod安装失败,Operation not permitted - /usr/bin/pod
- 20135323符运锦-----信息安全系统设计基础第三周学习总结
- 《TCP/IP详解 卷一:协议》读书笔记--RARP:逆地址解析协议
- spring-mybatis整合
- 网络与并发
- 八行代码解决八皇后问题(c++)
- Codeforces 583C GCD Table 模拟 map
- Android四大基本组件——BroadcastReceive
- linux个人学习笔记---linux文件类型
- 《操作系统》总结四(文件管理)
- SSH三大框架的工作原理及流程
- Swift学习笔记11——方法(Method)
- Ubuntu源问题(换源软件源更新源)
- JdbcTemplate查询(Spring框架中的工具类)
- BIOS入门之我见-布局
- POJ 3278 Catch That Cow
- SSH框架总结(框架分析+环境搭建+实例源码下载)
- Inside the C++ Object Model | Outline
- ssoj2427: 学数数(RMQ)