zoukankan      html  css  js  c++  java
  • UVa 121

    称号:放置在一个圆中的矩形,它要求每个圆的每行或列是切线,问:多少能竖起来。

    分析:计算几何。数论。首先计算矩形显示屏,然后计算互显示器(每一行与相邻行相同差1个月)求最大,你可以。

    说明:╮(╯▽╰)╭作为全球最大的显示器WA美好时光。

    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    #include <cmath>
    
    using namespace std;
    
    //题目方式摆放 
    int getmin(double x, double y)
    {
    	int a = (int)x,m = 0;
    	int b = (int)(2.0*(y-1.0)/sqrt(3.0))+1;
    	if (m < a*b-b/2)
    		m = a*b-b/2;
    		a = (int)x;
    	if (a+0.5 <= x && m < a*b)
    		m = a*b;
    	return m;
    }
    
    //最大数目摆放 
    int getmax(double x, double y)
    {
    	int a = (int)x,m = 0;
    	//n+1,n,n+1方式 
    	while (a > 1 && y >= 1) {
    		double d = (x-1.0)/(a-1.0);
    		if (d >= 2) break;
    		double r = sqrt(1.0-0.25*d*d);
    		if (r < 0.5) r = 0.5;
    		int b = (int)((y-1.0)/r)+1;
    		if (m < a*b-b/2)
    			m = a*b-b/2;
    		a --;
    	}
    	//n,n,n方式
    	a = (int)x;
    	while (a > 0 && y >= 1) {
    		double d = 2*(x-1.0)/(2*a-1.0);
    		if (d >= 2) break;
    		if (d >= 1) {
    			double r = sqrt(1.0-0.25*d*d);
    			if (r < 0.5) r = 0.5;
    			int b = (int)((y-1.0)/r)+1;
    			if (m < a*b)
    				m = a*b;
    		}
    		a --;
    	}
    	return m;
    }
    
    int main()
    {
    	double x,y;
    	while (cin >> x >> y) {
    		int n = (int)x*(int)y,m = 0,p,q;
    		
    		p = getmin(x, y);
    		if (p > m) m = p;
    		q = getmin(y, x);
    		if (q > m) m = q;
    		
    		if (m > n && x >= 1 && y >= 1)
    			cout << m << " skew" << endl;
    		else cout << n << " grid" << endl;
    	}
    	return 0;
    }
    

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    verilog编码规范
    verilog代码 想法验证---与寄存器输出有关
    MMCM与PLL
    Vivado约束文件(XDC)的探究(2)
    Vivado约束文件(XDC)的探究(1)
    VGA图像显示组成模块分析
    关于Quad PLL /CPLL参考时钟的选择
    GTX的生成(包括COMMON)
    SD-SDI播出系统---使用GTX TX产生恢复时钟
    DRP端口描述
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4755968.html
Copyright © 2011-2022 走看看