【链接】 我是链接,点我呀:)

【题意】

给你一个数组A[]经过a[i][j] = gcd(A[i],A[j])的规则生成的二维数组
让你求出原数组A

【题解】

我们假设原数组是A
然后让A数组满足A[i](感性认知一下)

每次都把A[i+1..n]这些数字产生的gcd都删掉

那么剩余的a[][]里面只有A[1..i]产生的gcd

那么因为A[i]是最大值,所以gcd(A[i],A[i])肯定也是a[][]里面的最大值,也即A[i]=剩余的a[][]里面的最大值

【代码】

import java.io.*;
import java.util.*; public class Main { static InputReader in;
static PrintWriter out; public static void main(String[] args) throws IOException{
//InputStream ins = new FileInputStream("E:\\rush.txt");
InputStream ins = System.in;
in = new InputReader(ins);
out = new PrintWriter(System.out);
//code start from here
new Task().solve(in, out);
out.close();
} static int N = 500;
static class Task{ int n;
int ans[] = new int[N+10];
TreeMap<Integer, Integer> dic = new TreeMap<Integer,Integer>(); int _findmax() {
int x = dic.lastKey();
return x;
} int gcd(int x,int y) {
if (y==0) return x;
else return gcd(y,x%y);
} void _delete(int x) {
int y = dic.get(x);
y--;
if (y==0) dic.remove(x);else dic.put(x, y);
} public void solve(InputReader in,PrintWriter out) {
n = in.nextInt();
for (int i = 1;i <= n*n;i++) {
int x = in.nextInt();
if (dic.containsKey(x)) {
int y = dic.get(x);
y++;
dic.put(x, y);
}else dic.put(x, 1);
}
for (int i = n;i >= 1;i--) {
ans[i] = _findmax();
_delete(gcd(ans[i],ans[i]));
for (int j = i+1;j<= n;j++) {
_delete(gcd(ans[i],ans[j]));
_delete(gcd(ans[i],ans[j]));
}
}
for (int i = 1;i <= n;i++)
out.print(ans[i]+" ");
out.println();
}
} static class InputReader{
public BufferedReader br;
public StringTokenizer tokenizer; public InputReader(InputStream ins) {
br = new BufferedReader(new InputStreamReader(ins));
tokenizer = null;
} public String next(){
while (tokenizer==null || !tokenizer.hasMoreTokens()) {
try {
tokenizer = new StringTokenizer(br.readLine());
}catch(IOException e) {
throw new RuntimeException(e);
}
}
return tokenizer.nextToken();
} public int nextInt() {
return Integer.parseInt(next());
}
}
}

最新文章

  1. mysql 队列 实现并发读
  2. Button 对 TreeView1 所有节点的全选
  3. redis的简单安装配置
  4. android -- 蓝牙 bluetooth (五)接电话与听音乐
  5. Hadoop 流
  6. C#多线程编程(转)
  7. delphi CoolBar这个怎么弄没了
  8. console.table(),在控制台以表格形式输出对象
  9. Codeforces Round #551 (Div. 2) D. Serval and Rooted Tree (树形dp)
  10. MySQL复制错误1837的相关缺陷一例
  11. 学习 MeteoInfo二次开发教程(四)
  12. 吴裕雄 python深度学习与实践(10)
  13. expect 交互 telnet 交互
  14. C51寄存器
  15. python sort、sorted
  16. 深入浅出SharePoint2013——安装SharePoint2013
  17. struct to point
  18. Java设计模式(4)——单例模式
  19. android使用achartengine 实现折线图
  20. 「小程序JAVA实战」小程序我的个人信息-注销功能(42)

热门文章

  1. DNS中的AC、rndc、智能DNS解析和基础排错
  2. Objective-C 对象的类型与动态结合
  3. self , static 都是何方神圣?
  4. mysql5.7 1055
  5. 2017 Pycharm激活码
  6. [Qt Creator 快速入门] 第3章 窗口部件
  7. JS数组、outerHtml、className
  8. 基于Web的Kafka管理器工具之Kafka-manager启动时出现Exception in thread &quot;main&quot; java.lang.UnsupportedClassVersionError错误解决办法(图文详解)
  9. C#学习-EF在三层中使用
  10. document.write清除原有内容情况