题目链接: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. web前端网页特效大全导航列表

    CSS3和Html5 图表与图形 表单验证 导航菜单 table选项卡 视频播放器 日期和时间 返回顶部 图层代码 滚动代码 幻灯片 文字特效 图片放大镜 juqery焦点图 瀑布流 广告悬浮代码 在 ...

  2. sqlite时间比较语法

    如下: 字段 > datetime('2000-01-01 01:01:01') AND 字段 < datetime('2001-01-01 01:01:01');

  3. JavaScript之常用方法讲解

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

  4. 说说php取余运算(%)的那点事

    http://www.phpddt.com/php/php-take-over.html       fmod()与 % 区别   都是取余 fmod是函数 原型float fmod(float x, ...

  5. Hadoop的RPC框架介绍

    为什么会引入RPC: RPC采用客户机/服务器模式.请求程序就是一个客户机,而服务提供程序就是一个服务器.当我们讨论HDFS的,通信可能发生在: Client-NameNode之间,其中NameNod ...

  6. Apache CXF实现Web Service(4)——Tomcat容器和Spring实现JAX-RS(RESTful) web service

    准备 我们仍然使用 Apache CXF实现Web Service(2)——不借助重量级Web容器和Spring实现一个纯的JAX-RS(RESTful) web service 中的代码作为基础,并 ...

  7. Unity3D战争迷雾效果

    原地址:http://liweizhaolili.blog.163.com/blog/static/16230744201431835652233/ 最近一直都在做Flash相关的东西,很久没有空搞U ...

  8. Using an Interface as a Type

    When you define a new interface, you are defining a new reference data type. You can use interface n ...

  9. 在线API文档

    http://www.ostools.net/apidocs A Ace akka2.0.2 Android Ant Apache CXF Apache HTTP服务器 ASM字节码操作 AutoCo ...

  10. 链表(c语言实现)--------------小练习

    #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_SIZE 100 #d ...