题目链接:http://lightoj.com/volume_showproblem.php?problem=1366

题意:给出一个矩形,在内部画两个圆A和B使得AB都完全在矩形内且AB相切且AB的圆心和半径都是整数。求有多少个这样的画法?

思路:总的来说,相切有两种情况:(1)水平或垂直方向相切。这个比较简单,枚举两个圆的直径,然后分水平垂直两种情况,计算较小的那个圆可以移动的范围,其实可以移动的范围是一个矩形;(2)斜着相切。这时候两个圆心的距离必然是一个勾股数。所以枚举勾股数,然后再枚举小圆的半径,这时候我们可以计算出两个圆在X和Y方向的跨度,也就是一个矩形。然后判断这个矩形在整个大矩形中有多少可以放置的位置,这里可以横着放和竖着放两种情况。注意,在一种矩形中,两个圆可以左上右下或者左下右上两种方式。然后两个圆半径不等时还可以再交换位置。

vector<int> a,b,c;
int cnt,n,m;

void init()
{
    int i,j,k,t;
    FOR1(i,1000) FOR(j,i,1000)
    {
        k=i*i+j*j;
        t=sqrt(1.0*k);
        if(t*t==k) a.pb(i),b.pb(j),c.pb(t);
        else if((t-1)*(t-1)==k) a.pb(i),b.pb(j),c.pb(t-1);
        else if((t+1)*(t+1)==k) a.pb(i),b.pb(j),c.pb(t+1);
    }
    cnt=SZ(a);
}

i64 cal()
{
    if(n>m) swap(n,m);
    i64 ans=0;
    int i,j,x,y;
    for(i=2;i<=n;i+=2) for(j=i;j<=m;j+=2)
    {
        x=m-j+1-i;
        y=n-j+1;
        if(x>0&&y>0)
        {
            ans+=x*y;
            if(i!=j) ans+=x*y;
        }
        x=n-j+1-i;
        y=m-j+1;
        if(x>0&&y>0)
        {
            ans+=x*y;
            if(i!=j) ans+=x*y;
        }
    }
    int xx,yy;
    for(i=0;i<cnt&&a[i]<=n;i++) for(j=1;j+j<=c[i]&&c[i]<=m;j++)
    {
        xx=max(a[i]+c[i],(c[i]-j)*2);
        yy=max(b[i]+c[i],(c[i]-j)*2);
        x=n+1-xx;
        y=m+1-yy;
        if(x>0&&y>0)
        {
            ans+=x*y*2;
            if(j+j!=c[i]) ans+=x*y*2;
        }
        x=m+1-xx;
        y=n+1-yy;
        if(x>0&&y>0)
        {
            ans+=x*y*2;
            if(j+j!=c[i]) ans+=x*y*2;
        }
    }
    return ans;
}

int main()
{
    init();
    int num=0;
    rush()
    {
        RD(n,m);
        printf("Case %d: ",++num);
        PR(cal());
    }
}

lightOJ 1366 Pair of Touching Circles(统计矩形内相切圆对)的更多相关文章

  1. LightOJ 1366 - Pair of Touching Circles (统计矩形内外切圆对)

    1366 - Pair of Touching Circles   PDF (English) Statistics Forum Time Limit: 3 second(s) Memory Limi ...

  2. LightOj1366 - Pair of Touching Circles(求矩形内圆的对数)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1366 题意:一个H*W的矩形,现在要放入两个外切的圆,问能放多少对这样的圆,其中圆心和 ...

  3. UVA 12373 Pair of Touching Circles

    思路:(注意2个圆的半径可以不一样) 有2种情况: 1) 水平和竖直放.这种情况很简单,刚开始以为只有这种情况,但是样例5不对,后来知道还有一种情况. 2)斜线也可以放.只要满足勾股数就可以.现在的问 ...

  4. POJ 1410 Intersection(判断线段交和点在矩形内)

    Intersection Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9996   Accepted: 2632 Desc ...

  5. 以log(n)的时间求矩形内的点

    设想这么一个简单的问题,在一个平面上有n个点,给定一个矩形,问位于矩形内的点有哪些. 这个问题的简单思路非常简单,每次遍历所有点,看其是否在给定的矩形中.时间复杂度呢?单次查询的时间就是一次遍历的时间 ...

  6. sqlserver 统计每分钟内的数量

    1.统计每分钟内 url 的访问数量 SELECT SUBSTRING(CONVERT(varchar(100), date, 20), 0,17) as dateTime,COUNT(url) as ...

  7. 洛谷P2241-统计方形-矩形内计算长方形和正方形的数量

    洛谷P2241-统计方形 题目描述: 有一个 \(n \times m\) 方格的棋盘,求其方格包含多少正方形.长方形(不包含正方形). 思路: 所有方形的个数=正方形的个数+长方形的个数.对于任意一 ...

  8. LightOJ 1414 February 29(闰年统计+容斥原理)

    题目链接:https://vjudge.net/contest/28079#problem/R 题目大意:给你分别给你两个日期(第二个日期大于等于第一个日期),闰年的2月29日称为闰日,让你求两个日期 ...

  9. PKU 1050-To The Max(找矩形内元素最大和)

    Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous s ...

随机推荐

  1. 【BZOJ】【2245】【SDOI2011】工作安排

    网络流/费用流 裸题吧……直接建模就好了……所谓的“分段函数”就是吓唬你的,其实就是对于每个人分开建几条流量不同.费用不同的弧而已. 对每种产品,连S->i ,(c[i],0):对每个工作人员 ...

  2. 序列化Color对象

    如下: public class Class2 { [XmlIgnore] public Color Color1 { get { return color1; } set { color1 = va ...

  3. Vim 中使用cscope

    使用cscope碰到的问题 1. E568: duplicate cscope database not added 根据提示,cscope数据库重复添加了,我使用的是vim7.2版本,而这个版本在已 ...

  4. Python3中的新特性(1)——新的语言特性

    1.源代码编码和标识符         Python3假定源代码使用UTF-8编码.另外,关于标识符中哪些字符是合法的规则也放宽了.特别是,标识符可以包含代码点为U+0080及以上的任意有效Unico ...

  5. <context:annotation-config> 跟 <context:component-scan>诠释及区别

    <context:annotation-config> 是用于激活那些已经在spring容器里注册过的bean(无论是通过xml的方式还是通过package sanning的方式)上面的注 ...

  6. awk处理之案例二:awk匹配文本

    编译环境 本系列文章所提供的算法均在以下环境下编译通过. [脚本编译环境]Federa 8,linux 2.6.35.6-45.fc14.i686 [处理器] Intel(R) Core(TM)2 Q ...

  7. AwSnap:让全版本(Windows、iOS、Android)Chrome浏览器崩溃的有趣漏洞

    彩蛋爆料直击现场 几周前,我们曾报道了13个字符导致Chrome崩溃的漏洞.然而,这个漏洞有个小小的遗憾,那就是它只在MAC OS X下生效,其他系统并不受影响. 现在,我们又有了一个更有趣的漏洞.黑 ...

  8. iOS NSString 和NSData 转换

    NSString 转换成NSData 对象 NSData* xmlData = [@"testdata" dataUsingEncoding:NSUTF8StringEncodin ...

  9. 2014多校第二场1011 || HDU 4882 ZCC Loves Codefires (贪心)

    题目链接 题意 : 给出n个问题,每个问题有两个参数,一个ei(所要耗费的时间),一个ki(能得到的score).每道问题需要耗费:(当前耗费的时间)*ki,问怎样组合问题的处理顺序可以使得耗费达到最 ...

  10. android-exploitme(七):高级加密

    在上一个议题上我们解释了为什么不能把信息明文保存在设备上,应该加密,那么加密就是安全的吗? 下面来看一下, 编译BasicEncryptionSolution.apk,安装