当前位置: 首页 > news >正文

【题解】Atcoder Beginner Contest 439(ABC439) A~E

A - 2^n - 2*n

直接计算即可。

#include<bits/stdc++.h>
using namespace std;
int n;
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>n;cout<<pow(2,n)-2*n;return 0;
}

B - Happy Number

直接模拟即可。

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,t;
bool vis[N];
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>n;t=n;while(t!=1){int tmp=t,sum=0;while(tmp){sum+=((tmp%10)*(tmp%10));tmp/=10;}t=sum;if(t==1){cout<<"Yes";return 0;} if(vis[t]){cout<<"No";return 0;}vis[t]=1;}cout<<"Yes";return 0;
}

C - 2026

因为 \(n\le 10^7\),所以 \(x,y\le \sqrt{10^7}\),两层循环枚举 \(x,y\),将 \(x^2+y^2\) 的解数 \(+1\),最后枚举统计解为 \(1\) 的数输出。时间复杂度 \(O(n)\)

#include<bits/stdc++.h>
using namespace std;
const int N=1e7+10;
int n,ans;
int cnt[N];
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>n;for(int i=1;i<=n/i;i++){for(int j=i+1;j<=n/j;j++){long long sum;sum=1ll*(1ll*i*i+1ll*j*j);if(sum<=n) cnt[sum]++; }}for(int i=1;i<=n;i++){if(cnt[i]==1) ans++;}cout<<ans<<'\n';for(int i=1;i<=n;i++){if(cnt[i]==1) cout<<i<<' ';;} return 0;
}

D - Kadomatsu Subsequence

注意到第三个条件,\(j\) 只能为三元组中在原数组里第一个或最后一个出现的元素。这是一个很好的性质,启发我们可以用前缀后缀的思想来求解。

接着考虑剩下两个元素,要成 \(3:5:7\) 关系。那么首先 \(j\) 应是 \(5\) 的倍数,且另两个元素应是 \(3,7\) 的倍数,且分别 \(\div 3,\div 5,\div 7\) 的值相等。

那么我们就可以使用两个 map 分别维护 \(j\) 之前值为 \(3\times t,7\times t\) 的元素数量。若 \(A_j=5\times t\),则根据乘法原理,将 \(3\times t\)\(7\times t\) 的元素个数相乘即是 \(A_j\) 参与构成的三元组数量。

这是 \(j\) 作最后一个出现的元素时的情况,反着求一遍就是另一种情况。

时间复杂度 \(O(n)\)

#include<bits/stdc++.h>
using namespace std;
const int N=3e5+10;
int n;
long long ans;
int a[N];
map<int,int> mp3,mp7;
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>n;for(int i=1;i<=n;i++){cin>>a[i];if(a[i]%3==0) mp3[a[i]/3]++;if(a[i]%7==0) mp7[a[i]/7]++;if(a[i]%5==0) ans+=1ll*(1ll*mp3[a[i]/5]*1ll*mp7[a[i]/5]);}mp3.clear();mp7.clear();for(int i=n;i>=1;i--){if(a[i]%3==0) mp3[a[i]/3]++;if(a[i]%7==0) mp7[a[i]/7]++;if(a[i]%5==0) ans+=1ll*(1ll*mp3[a[i]/5]*1ll*mp7[a[i]/5]);}cout<<ans;return 0;
}

E - Kite

将线段交叉转化,即可得到合法的两条线段为:

  • \(A_i<A_j,B_i<B_j\)
  • \(A_i>A_j,B_i>B_j\)

想到按 \(A_i\) 大小升序排序,此时题目转化为了求当前 \(B_i\) 的最长上升子序列。

使用二分优化 LIS 求解。时间复杂度 \(O(n\log n)\)

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
struct Node{int a,b;
}kt[N];
int n,len;
int f[N];
bool cmp(Node x,Node y){if(x.a==y.a) return x.b>y.b;return x.a<y.a;
}
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>n;for(int i=1;i<=n;i++) cin>>kt[i].a>>kt[i].b;sort(kt+1,kt+1+n,cmp);for(int i=1;i<=n;i++){if(kt[i].b>f[len]) f[++len]=kt[i].b;else{int t=lower_bound(f+1,f+1+len,kt[i].b)-f;f[t]=kt[i].b;}}cout<<len;return 0;
}
http://www.jsqmd.com/news/189042/

相关文章:

  • GetQzonehistory:QQ空间数据备份技术方案解析
  • 深度学习计算机毕设之机器学习基于图像分割的疲劳检测方法研究人工智能
  • 2026最新橡胶木十大品牌权威榜单发布!国内优质板材源头厂家实力解析 - 全局中转站
  • PotPlayer字幕翻译插件完整使用教程:5步实现实时字幕翻译
  • AssetStudio游戏资源提取完整指南:5步快速上手终极教程
  • ComfyUI离线节点安装完整指南:三步实现本地ZIP包部署
  • OBS多平台直播终极指南:轻松实现全网同步推流
  • GetQzonehistory:轻松备份你的QQ空间记忆宝库
  • OBS多平台直播解决方案:告别观众分散的烦恼
  • 终极指南:如何快速安装DOL中文模组
  • 图像标签管理工具完整指南:从基础操作到批量处理高效工作流
  • yfinance数据修复技术深度解析:构建可靠的金融数据处理管道
  • NCMconverter完整教程:轻松解密网易云音乐格式转换
  • 突破性GitHub网络加速方案:3种高效方法解决开发者访问痛点
  • MAA明日方舟智能辅助工具:新手也能轻松上手的自动化神器
  • 崩坏星穹铁道自动化神器:三月七小助手解放你的游戏时间
  • 猫抓cat-catch资源嗅探工具:从入门到精通的完整使用指南
  • BooruDatasetTagManager终极指南:从入门到精通的图像标签管理完整教程
  • 哔哩下载姬DownKyi:零基础小白也能轻松掌握的B站视频下载终极指南
  • iOS系统定制工具Cowabunga Lite的架构解析与技术实现
  • BooruDatasetTagManager终极指南:告别图像标注烦恼的高效解决方案
  • BBDown实战指南:告别B站视频下载困扰的终极解决方案
  • vue+uniapp微信小程序的电力巡查巡线任务分配系统三端vue
  • ViGEmBus虚拟手柄驱动:快速解决游戏控制器兼容性难题
  • MTKClient实战指南:让联发科设备调试变得轻松有趣
  • vue+uniapp微信小程序的的碎片化学习签到打卡系统
  • 5大功能解析:PCL2社区版如何重新定义Minecraft启动体验
  • Moonlight TV:大屏游戏串流新体验
  • QT5+opencv4.1 编译 踩坑
  • 5分钟极速汉化:Degrees of Lewdity中文版完整安装指南