题目链接: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. 设计模式之状态模式(State)

    状态模式原理:随着状态的变化,对象的行为也发生变化 代码如下: #include <iostream> #include <string> #include <list& ...

  2. Spring MVC 入门教程示例 (一)

    今天和大家分享下  Spring MVC  入门教程 首先还是从 HelloWorld  web 工程开始 -------------------------- 1.首先创建一个Maven Web工程 ...

  3. hdu 1533 Going Home 最小费用最大流

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1533 On a grid map there are n little men and n house ...

  4. 【CodeForces】【311E】Biologist

    网络流/最大权闭合图 题目:http://codeforces.com/problemset/problem/311/E 嗯这是最大权闭合图中很棒的一道题了- 能够1A真是开心-也是我A掉的第一道E题 ...

  5. HBAO

    nv算是坑死我了,之前下的hbao的sample这次怎么都找不到 http://developer.download.nvidia.com/SDK/10.5/direct3d/samples.html ...

  6. JavaScript之常用方法讲解

    1.indexOf() 定义和用法 indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置. 语法 stringObject.indexOf(searchvalue,frominde ...

  7. Tomcat漏洞说明与安全加固

    Tomcat是Apache软件基金会的一个免费的.开放源码的WEB应用服务器,可以运行在Linux和Windows等多个平台上,由于其性能稳定.扩展性好.免费等特点深受广大用户的喜爱.目前,互联网上绝 ...

  8. Unity3D 运营商支付 安卓打包的陷阱 libunicomsdk.jar

    原地址:http://blog.csdn.net/alking_sun/article/details/36624491 想想做Unity3D SDK集成已经快2年了,遇到过不少很棘手的SDK,其中以 ...

  9. tcpkill清除异常tcp连接

    tcpkill清除异常tcp连接 在linux系统中,遇到TCP链接迟迟不能释放的情况,类似FIN_WAIT1.FIN_WAIT2的状态,释放时间不确定,而且对应的程序已经关闭,相应的端口也不再监听, ...

  10. HDU4784 Dinner Coming Soon(dp)

    当时区域赛的一道题.题意大概是这样的,有一个1~N的图,然后你要从1->N,其中每经过一条边需要消耗你的时间和金钱,每到一个地方可以选择什么都不做,或者买一包盐,卖一包盐,身上不能同时有超过B包 ...