CF582A 题解
有意思的思维题。
题意简述
由一个数列
题目分析
这个题的突破口在于这样一个结论:表中最大的数
证明:设
找到最大值之后就十分简单了。我们找到了最大值
代码实现
STL 浓度过高不喜勿喷
#include<bits/stdc++.h> using namespace std; int n,x; map<int,int>S; vector<int>ans; int main() { scanf("%d",&n); for(int i=1;i<=n*n;i++) scanf("%d",&x),S[x]++;//把每个数直接扔进桶里 while(!S.empty())//桶里还有就继续 { auto i=S.end(); i--;//找到最大的数对应的迭代器 for(auto j:ans)//遍历 a 中已经确定的数 { int tmp=__gcd(i->first,j); S[tmp]-=2;//删掉和当前最大数有关的所有 gcd(a_i,a_j),注意每个数在表里都出现 2 次,所以个数-=2。 if(!S[tmp])//删没了就把迭代器也给删了 S.erase(tmp); } ans.push_back(i->first);//把最大数扔到答案里 i->second--;//删掉 gcd(a_j,a_j) if(!i->second) S.erase(i);//删没了就把迭代器也给删了 } for(auto i:ans) printf("%d ",i);//输出 return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端