算法:POJ1006 三重峰值问题
这题有直接套公式的解法
这里提供一个O(n)的解法。
package practice; import java.io.BufferedInputStream; import java.util.Scanner; /** * * * @author caiyu * @date 2014-11-4 */ public class POJ1006 { public static void main(String[] args) { Scanner cin = new Scanner(new BufferedInputStream(System.in)); while (true) { int p = cin.nextInt(); if (p < 0) break; int e = cin.nextInt(); if (e < 0) break; int i = cin.nextInt(); if (i < 0) break; int d = cin.nextInt(); if (d < 0) break; int x = 1, y = 1, z = 1; int ty = 0, tx = 0, tz = 0; boolean fx = true, fy = true, fz = true; int temp = 0; while (true) { if (fy) { if (ty < 21252) ty = e + 28 * y++ - d; else break; if ((ty - p + d) % 23 == 0) { if (ty > temp) { temp = ty; fz = true; fx = true; fy = false; } else if (ty == temp) { fy = false; } } } if (fz) { if (tz < 21252) tz = i + 33 * z++ - d; else break; if ((tz - p + d) % 23 == 0) { if (tz > temp) { temp = tz; fx = true; fy = true; fz = false; } else if (tz == temp) { fz = false; } } } if (fx) { if (tx < 21252) tx = p + 23 * x++ - d; else break; if ((tx - e + d) % 28 == 0) { if (tx > temp) { temp = tx; fy = true; fz = true; fx = false; } else if (tx == temp) { fx = false; } } } if (!fx && !fy && !fz) break; } System.out.println("Case 1: the next triple peak occurs in " + temp + " days."); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)