【题解】ARC 124

C - LCM of GCDs

考点: map + 暴力枚举

#include<bits/stdc++.h> #define fi first #define se second #define ll long long #define PII pair<int,int> #define All(x) x.begin(),x.end() using namespace std; const int mx=55; const int mxn=10005; int n,cnt; ll a[mx],b[mx],res; vector<ll> c(1); map<ll,bool> mp; map<ll,int> mp3; void get(ll x) { for(ll i=1;i<=sqrt(x);i++) { if(x%i==0) { mp3[i]++; if(!mp[i]) c.push_back(i),mp[i]=1; if(x/i!=i) { mp3[x/i]++; if(!mp[x/i]) c.push_back(x/i),mp[x/i]=1; } } } } ll gcd(ll x,ll y) { return (y==0)?x:gcd(y,x%y); } ll lcm(ll x,ll y) { return x/gcd(x,y)*y; } bool check(ll x,ll y) { ll x2=0,y2=0; for(int i=1;i<=n;i++) { if((a[i]%x==0&&b[i]%y==0)||(a[i]%y==0&&b[i]%x==0)) { continue; } return 0; } return 1; } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%lld%lld",&a[i],&b[i]); get(a[i]),get(b[i]); } sort(c.begin(),c.end()); for(int i=1;i<c.size();i++){ if(mp3[c[i]]<n) continue; for(int j=i;j<c.size();j++) { ll tmp=lcm(c[i],c[j]); if(tmp<=res||mp3[c[j]]<n) continue; if(check(c[i],c[j])) { res=tmp; } } } printf("%lld",res); }

D - Yet Another Sorting Problem

本该是水题,结果分类讨论裂开了。。。

不难想到连边 i->p[i] ,那么对于只有一种颜色的环,势必要花费一次操作与其他环合成一个环然后继续合并,观察到一次合并后环的个数少一,所以每次合并代价为 2。

但是这里要考虑两种不同颜色环的情况,可以考虑以下公式:

n+m-cnt-2*max(cnt1,cnt2) 。其中 cnt 表示环的数量,包括一种颜色的环。 max(cnt1,cnt2) 表示需要合并的最小次数,而 2 表示每次合并的花费。

当然也等价于:n+m-cnt+max(cnt1,cnt2)-min(cnt1,cnt2) ,其中 cnt 不包括自环和一种颜色的环。

总结:栽在这道题上还是因为把简单的问题想复杂了。拿到问题要深入分析,不能浮于表面。

#include<bits/stdc++.h> #define fi first #define se second #define ll long long #define PII pair<int,int> #define All(x) x.begin(),x.end() using namespace std; const int mx=2e5+5; int n,m,p[mx],vis[mx],cnt,cnt1,cnt2; int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n+m;i++) { scanf("%d",&p[i]); if(p[i]==i) {cnt++;vis[i]=1;} } for(int i=1;i<=n+m;i++) { if(vis[i]) continue; int j=i,f1=0,f2=0; for(;!vis[j];j=p[j]) { if(j<=n) f1++; else f2++; vis[j]=1; } cnt++; if(!f2){ cnt1++; } else if(!f1){ cnt2++; } } printf("%d",n+m-cnt+2*max(cnt1,cnt2)); }

__EOF__

本文作者仰望星空的蚂蚁
本文链接https://www.cnblogs.com/cqbzly/p/17530313.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   仰望星空的蚂蚁  阅读(4)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示