POJ_1006
http://poj.org/problem?id=1006
根据题意很自然地写出了暴破解法如下:
//POJ_1006 #include<stdio.h> int main(){ int n,i,j,k; int p,q,r,d; n = 0; while(true){ scanf("%d %d %d %d",&p,&q,&r,&d); if(p==-1 && q==-1 && r==-1 && d==-1){ break; } n++; for(i=p;;i+=23){ for(j=q;j<=i;j+=28){ for(k=r;k<=j;k+=33){ if(k==j&&j==i){ goto l1; } } } } l1: if(d>=i){ i+=21252; } printf("Case %d: the next triple peak occurs in %d days.\n",n,i-d); } return 0; }
但是太慢了,TLE
网上搜了下,根据中国剩余定理可以使效率得到很好的提升
https://blog.csdn.net/blogdevteam/article/details/102485483
//POJ_1006 //https://blog.csdn.net/qq_40379678/article/details/79034011 //中国剩余定理 /* a%b=c ==> (a+kb)%b=c a%b=c ==> (a*k)%b=kc */ /* S = p+23a = q+28b = r+33c 23*28 = 644 23*33 = 759 28*33 = 924 23*28*33 = 21252 */ #include<stdio.h> int main(){ int n,i,j,k; int p,q,r,d; int p1,q1,r1; int S; n = 0; while(true){ scanf("%d %d %d %d",&p,&q,&r,&d); if(p==-1 && q==-1 && r==-1 && d==-1){ break; } n++; p1 = p%23; for(i=924;;i+=924){ if(i%23==1){ break; } } i = i*p1; q1 = q%28; for(j=759;;j+=759){ if(j%28==1){ break; } } j = j*q1; r1 = r%33; for(k=644;;k+=644){ if(k%33==1){ break; } } k = k*r1; S = (i+j+k)%21252; if(S<=d){ S = S+21252; } printf("Case %d: the next triple peak occurs in %d days.\n",n,S-d); } return 0; }
————————————————
版权声明:本文为CSDN博主「abc827300139」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ABC827300139/article/details/102490609
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)