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

AtCoder Beginner Contest 361

目录

A - Insert

B - Intersection of Cuboids

C - Make Them Narrow

D - Go Stone Puzzle 

E - Tree and Hamilton Path 2

F - x = a^b


A - Insert

我们按照题目意思直接模拟即可,不需要使用数组在第k位置的时候额外输出一个x即可

int t,n,m,k,x;
void solve(){cin>>n>>k>>x;for(int i=1;i<=n;i++){int t; cin>>t; cout << t << ' ';if(i==k) cout << x << ' ';}cout << endl;return ;
}

B - Intersection of Cuboids

求是不是有接触面积,如果有的话就是存在一个点在另一个立方体里面,否则就是没有,由于题目都是立方体,所以可以看每一个坐标是不是存在直接远离(不可能存在交点)即可

int x[5],y[5],z[5];void solve(){for(int i=1;i<=4;i++) cin>>x[i]>>y[i]>>z[i];if(x[1]>=x[4] or x[2]<=x[3] or y[1]>=y[4] or y[2]<=y[3] or z[1]>=z[4] or z[2]<=z[3]){cout << "No" << endl;}else{cout << "Yes" << endl;}return ;
}

C - Make Them Narrow

可以知道如果不删除当前最大值或者最小值的话贡献是0,所以可以优先排序,那么要么那就是删除最大值,要么就是删除最小值,枚举所有情况,删除前i个最大的数,就删除m-i个最小的数,注意0<=i<=m


void solve(){cin>>n>>m;for(int i=1;i<=n;i++) cin>>a[i];sort(a+1,a+1+n);int ans = 2e9;for(int i=0;i<=m;i++){ans = min(ans,a[n-(m-i)]-a[i+1]);} cout << ans << endl;return ;
}

D - Go Stone Puzzle 

明显的字符串交换,也就是bfs搜索找最优解,类似八数码,用一个unorderde_map<string,int> 判断是否出现过即可

int t,n,m;void solve(){cin>>n;string a,b; cin>>a>>b;a+=' ',a+=' ';b+=' ',b+=' ';auto bfs = [&](){unordered_map<string,int> mp;mp[a]=0;queue<string> q;q.push(a);while(!q.empty()){auto t = q.front(); q.pop();if(t==b) return mp[b];string x = t;int t1;for(int i=0;i<n+2;i++) if(x[i]==' ') {t1=i; break;}for(int i=0;i<n+1;i++){if(t[i]!=' ' and t[i+1]!=' '){swap(x[i],x[t1]),swap(x[i+1],x[t1+1]);if(!mp.count(x)){mp[x]=mp[t]+1;q.push(x);}swap(x[i],x[t1]),swap(x[i+1],x[t1+1]);}}}return -1;};cout << bfs() << endl;return ;
}

E - Tree and Hamilton Path 2

从某一个点出发,到达所有点的最小值,可以画一个图找找性质,可以发现除了st-ed,即选定的出发点和最后到达的结束点之间的比权,其他所有的边权都两次,问题转化为求解,最短的树的最长直径,可以使用换根或者一次dfs即可,每次求出当前所在子树的两条最长路径,之和即是当前子树的最长直径,然后递归处理即可

LL res;
LL dfs(int u,int fa){LL d1=0,d2=0;for(auto&[v,w]:g[u]){if(v==fa) continue;LL d=dfs(v,u)+w;if(d>d1) d2=d1,d1=d;else if(d>d2) d2=d;}res = max(res,d1+d2);return d1;
}
void solve(){cin>>n;LL ans = 0;for(int i=1;i<n;i++){int a,b,c; cin>>a>>b>>c;g[a].push_back({b,c});g[b].push_back({a,c});ans += 2*c;}dfs(1,-1);ans -= res;cout << ans << endl;return ;
}

F - x = a^b

有个明显的思维就是直接枚举每一个次方,当时为2的时候有1e9个数(1e9^2==1e18)当然会超时,这个时候没有更好的做法,我们考虑不使用2次幂,直接从3次幂开始,则最多1e6个数,符合要求,同时对于2次幂当独计算,答案数量就是sqrtl(n),当时有些数既是x的次幂又是y的次幂,所以要用set去重,同时注意不把2次幂的数放入set,最后直接加上即可

void solve(){LL n; cin>>n;set<LL> S;int cnt = 10;for(LL i=2;i<=1e6;i++){ // 底数 LL now = i*i*i;if(now>n) break;while(true){LL x = sqrtl(now);if(x*x!=now) S.insert(now);if(now>n/i) break;now *= i;if(now<0) break;}}LL ans = S.size()+sqrtl(n);cout << ans << endl;return ;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SQL 字段类型-上
  • 旗晟机器人AI智能算法有哪些?
  • JRE、JVM、JDK分别是什么。
  • Django学习第六天
  • 构造函数注入@RequiredArgsConstructor
  • arp缓存中毒实验
  • 【大模型LLM面试合集】大语言模型架构_layer_normalization
  • 【HarmonyOS NEXT】鸿蒙线程安全容器集collections.ArrayBuffer
  • self_attention python代码
  • 超高精电容传感器PCAP01调试+LABVIEW数据可视化调试手记
  • 分析Profiler Timeline中的算子序列,通过寻找频繁项集的办法,得到TOPK可融合的算子序列
  • 12、matlab中for循环,if else判断语句,break和continue用法以及switch case语句使用
  • ORA-12537: TNS:连接关闭/Io 异常: Got minus one from a read call
  • Open3D SVD算法实现对应点集配准
  • CountDownLatch 是 Java 中的一个同步辅助工具类
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • angular学习第一篇-----环境搭建
  • const let
  • ECMAScript6(0):ES6简明参考手册
  • JavaScript类型识别
  • Java编程基础24——递归练习
  • js ES6 求数组的交集,并集,还有差集
  • Laravel Telescope:优雅的应用调试工具
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • MySQL主从复制读写分离及奇怪的问题
  • spring学习第二天
  • Swift 中的尾递归和蹦床
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 模型微调
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 微信小程序--------语音识别(前端自己也能玩)
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • ​520就是要宠粉,你的心头书我买单
  • ​ubuntu下安装kvm虚拟机
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • # Redis 入门到精通(一)数据类型(4)
  • #、%和$符号在OGNL表达式中经常出现
  • #每天一道面试题# 什么是MySQL的回表查询
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (003)SlickEdit Unity的补全
  • (不用互三)AI绘画工具应该如何选择
  • (翻译)terry crowley: 写给程序员
  • (函数)颠倒字符串顺序(C语言)
  • (面试必看!)锁策略
  • (三)Honghu Cloud云架构一定时调度平台
  • (十一)手动添加用户和文件的特殊权限
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • (小白学Java)Java简介和基本配置
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转载)Linux网络编程入门
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • *2 echo、printf、mkdir命令的应用