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

笔试强训 Day 15:平方数 + 分组 + 拓扑排序

Day 15

平方数

方法一:循环

把循环条件从遍历所有i,只循环到i * i >= n为止:

importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);longn=sc.nextLong();longx=0,y=0;for(longi=1;;i++){if(i*i>=n){x=i;y=i-1;break;}}longret=x*x;if(n-y*y<x*x-n){ret=y*y;}System.out.println(ret);}}

方法二:使用 Math.sqrt()

直接用平方根即可:

importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);longx=sc.nextLong();longa=(long)Math.sqrt(x);longy1=a*a;longy2=(a+1)*(a+1);if(x-y1<=y2-x){System.out.println(y1);}else{System.out.println(y2);}}}

分组

思路:

解题步骤:

importjava.util.*;// 每一组里的同学都必须擅长同一个声部// 不同组同学擅长同一个声部的情况是可以出现的// 不希望出现任何一组的人过多// 人数最多的小组的人尽可能少// 输出一个数,表示人数最多的小组的人数// 无法顺利安排,请输出-1// n个数,a[i](1≤a[i]≤n)表示第i个学生的擅长声部publicclassMain{staticintm=0,n=0;staticint[]cnt;publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);n=sc.nextInt();m=sc.nextInt();intkind=0;cnt=newint[n+1];// 只输入 n 个数, 每个数 a[i] <= n, 记录每个数出现的次数for(inti=0;i<n;i++){intx=sc.nextInt();cnt[x]++;if(cnt[x]==1)kind++;}// 当种类大于分组数量, 无法安排if(kind>m){System.out.println(-1);return;}// 二分查找分组后人数的最大值, 人数范围 (1~k), 在能分成 m 组的最大值中, 找最小值intl=1,r=n,minmax=n;while(l<=r){intmid=(l+r)/2;if(check(mid)){minmax=mid;r=mid-1;}else{l=mid+1;}}System.out.println(minmax);}privatestaticbooleancheck(intk){// 此时 kind >= m, 一定可以分成 m 组, 因此需要枚举能分成 m 组时, 组最大值的最小值// 如果最大值是 k , 会分成 nead 组, nead 组必须在 m 内longneed=0;for(inti=1;i<=n;i++){if(cnt[i]>0){// 向上取整// cnt[2] = 3, k = 2, 可以分为 (3 + 2 - 1)/2 组// cnt[2] = 4, k = 2, 可以分为 (4 + 2 - 1)/2 组need+=(cnt[i]+k-1)/k;}}returnneed<=m;}}

相关题目推荐:爱吃香蕉的珂珂


拓扑排序

思路用Kahn 算法

  1. 用邻接表存图,同时统计每个点的入度indegree
  2. 把所有入度为0的点加入队列。
  3. 每次从队列取出一个点,加入拓扑序结果。
  4. 遍历它指向的所有点,将这些点的入度减一。
  5. 如果某个点入度变成0,就加入队列。
  6. 最后如果结果数量等于n,说明存在拓扑序;否则说明图中有环,输出-1

基于你的代码可以这样写:

importjava.util.*;importjava.io.*;publicclassMain{privatestaticReadin=newRead();privatestaticPrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(System.out)));publicstaticvoidmain(String[]args)throwsIOException{intn=in.nextInt(),m=in.nextInt();List<Integer>[]graph=newArrayList[n+1];for(inti=1;i<=n;i++){graph[i]=newArrayList<>();}int[]indegree=newint[n+1];for(inti=0;i<m;i++){intu=in.nextInt();intv=in.nextInt();graph[u].add(v);indegree[v]++;}Queue<Integer>queue=newArrayDeque<>();for(inti=1;i<=n;i++){if(indegree[i]==0){queue.offer(i);}}int[]ans=newint[n];intidx=0;while(!queue.isEmpty()){intcur=queue.poll();ans[idx++]=cur;for(intnext:graph[cur]){indegree[next]--;if(indegree[next]==0){queue.offer(next);}}}if(idx!=n){out.println(-1);}else{for(inti=0;i<n;i++){if(i>0)out.print(" ");out.print(ans[i]);}out.println();}out.close();}}classRead{StringTokenizerst=newStringTokenizer("");BufferedReaderbf=newBufferedReader(newInputStreamReader(System.in));Stringnext()throwsIOException{while(!st.hasMoreTokens()){Stringline=bf.readLine();if(line==null)returnnull;st=newStringTokenizer(line);}returnst.nextToken();}intnextInt()throwsIOException{returnInteger.parseInt(next());}}

注意一个小细节:next()方法最好用while,不要只用if。因为输入里可能有空行,用while更稳。

http://www.jsqmd.com/news/1090922/

相关文章:

  • 【JAVA毕设源码分享】基于springboot智能垃圾分类系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 循环的跳出
  • C语言工具的安装(DEV-C++)
  • Windows11 2026 年 6 月 23 日 — KB5095093
  • 欧洲41.5度热浪的残酷警示:技术韧性是数字基建的最后一道防线
  • 求职期间项目一直在更新,简历总是忘了改——于是我写了一个自动同步工具
  • Java21+Jenkins2.555.1简易下载安装流程
  • 提示词工程已死,Loop Engineering 称王!保姆级教程 + 项目实战
  • 笔试强训 Day 16:字符串替换 + 神奇数 + DNA 序列
  • WaveTools鸣潮工具箱终极指南:3步实现免费帧率解锁与智能抽卡管理
  • 【计算机毕业设计案例】基于 Web 端的自助化在线投票系统的设计与实现 基于 SpringBoot 的线上民主评选投票系统(程序+文档+讲解+定制)
  • Java毕业设计-基于 SpringBoot 的老年健康信息监测系统设计与开发 社区老年人健康档案管理系统的设计与实现(源码+LW+部署文档+全bao+远程调试+代码讲解等)
  • 探索BilibiliDown:一款跨平台B站视频下载神器的黑科技实现
  • 小白用Codex和Claudecode也能做产品,程序员的出路在哪里?
  • JMeter压测404错误全解析:从请求配置到服务路由的排查实战
  • 类变量和实例变量在内存中存储的方式对代码可维护性有什么影响?类变量
  • Java毕设项目: 基于 B/S 模式的智能化网络投票评选系统的设计与实现(源码+文档,讲解、调试运行,定制等)
  • 一家制造企业的供应链噩梦:采购合同签署延误如何让旺季变成淡季
  • 如何三分钟搞定黑苹果配置:革命性智能配置生成器完全指南
  • FREE!ship Plus:开源船舶设计软件的终极完全指南
  • Sakura启动器:告别命令行,用图形界面轻松部署AI翻译模型
  • 记一次无感 FOC (龙伯格) 调参填坑
  • 做招商引资创投基金该读什么商学院硕士-交大MTT项目资源与人脉解读
  • 精准输入——@ 引用与搜索后生成的实战技巧
  • GPT-5.5 + Codex 真实项目体验:提效明显,但仍要人工把关?
  • 高并发压力测试,vLLM 在 AMD 集群上的吞吐量极限
  • TRAE Work Design 模式:把设计从“开盲盒”变成可交付的流程
  • xxxxxx
  • RuoYi-Vue-Pro全面指南:企业级后台管理系统的架构演进与最佳实践
  • 打造你的专属虚拟桌面伙伴:Mate Engine完全体验指南