UVA 1393 Highways(数学思想)
2017-04-12 20:53
274 查看
题意:给你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); } }
相关文章推荐
- UVA 1393 - Highways
- UVALive 3720 UVA 1393 Highways
- UVA 1393 - Highways
- UVa:1393 Highways
- Highways UVA - 1393
- uva 1393 Highways
- gcd,枚举,数学(高速公路,uva 1393)
- uva 11300 Spreading the Wealth 数学方法(函数思想)
- uva 1393 - Highways(容斥原理)
- UVALive 3720 Highways 组合数学
- UVA - 1393 Highways
- Uva 1393 - Highways 解题报告(递推)
- UVA 1393 Highways
- UVA 1393 - Highways (容斥原理计数)
- uva1393 Highways
- UVA 1393 Highways
- uva1393 Highways
- UVA - 1393 Highways(枚举包围盒大小,包围盒只有对角线穿过两个点)
- (组合数学3.1.1.2)UVA 10098 Generating Fast(使用字典序思想产生所有序列)
- uva 1393 - Highways(容斥原理)