UVA 1393 Highways(数学思想)
题意:给你n、m(n,m<=200),问你有多少条非水平、非垂直的直线有多少条经过至少两个点
题解:我们需要枚举的是只画一条线的矩形,对于大小a*b的矩形必须保证gcd(a,b)=1才能不重复
接着对于每个矩形可以放的位置有(n-a)(m-b)个,但是如果有矩形在某个矩形的左上方就会再次重复
因此只需要再减去max(0,n-2*a)*max(0,m-2*b)就好
import java.util.Scanner; public class Main{ static int Max=305; static int[][] gcd=new int[Max][Max]; static{ for(int i=1;i<Max;++i){ for(int j=1;j<Max;++j){ gcd[i][j]=Gcd(i, j); } } } public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n,m; while(sc.hasNext()){ n=sc.nextInt(); m=sc.nextInt(); if(n+m==0) break; System.out.println(Solve(n,m)); } } private static int Solve(int n, int m) { int res=0; for(int i=1;i<n;++i){ for(int j=1;j<m;++j){ if(gcd[i][j]==1){ int a1,a2; a1=(n-i)*(m-j); a2=Math.max(0, n-2*i)*Math.max(0, m-2*j); res+=a1-a2; //System.out.println(res); } } } return res*2; } private static int Gcd(int i, int j) { if(j==0) return i; else return Gcd(j, i%j); } }
分类:
ACM_数学
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决