题目链接: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. 设计模式之装饰模式(Decorator)

    装饰模式原理:给对象增加特性,这种特性是一种累加的效果 代码如下 #include <iostream> #include <string> #include <list ...

  2. 【BZOJ】【1901】【Zju2112】 Dynamic Rankings

    再填个坑. 动态维护区间第K大(带单点修改) 首先裸的区间第K大我们是用的[前缀和]思想,实现O(n)预处理,O(1)找树查询,那么如果是动态的呢?我们可以利用树状数组(BIT)的思想,进行O(log ...

  3. xcodebuild和xcrun实现自动打包iOS应用程序

    随着苹果手持设备用户的不断增加,ios应用也增长迅速,同时随着iphone被越狱越来越多的app 的渠道也不断增多,为各个渠道打包成了一件费时费力的工作,本文提供一种比较智能的打包方式来减少其带来的各 ...

  4. JavaScript在IE6,IE7下报错'expected identifier, string or number'

    问题: 代码在Forefox和IE8下工作正常,但是在IE6下报错: expected identifier, string or number 假如变量options有多个选项,那么我们可以用逗号分 ...

  5. 微信电脑版也能用公众号自定义菜单 微信1.2 for Windows发布

    昨日,微信电脑版发布更新,版本为微信1.2 for Windows,最大的特色就是加入了保存聊天记录功能,可以使用公账号菜单,手机上收藏的表情也能在电脑版上发送,可以接收转账消息. 本次微信pc版更新 ...

  6. UglifyJS--javascript代码压缩使用指南{转}

    在线测试地址 http://lisperator.net/uglifyjs/下面都是基于linux系统的安装使用.UglifyJS是遵循了CommonJS规范写成的,可以在支持CommonJS模块系统 ...

  7. C# 使用 AutoResetEvent 或 ManualResetEvent 同步两个线程

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  8. CRF++中文分词使用指南

    http://blog.csdn.net/marising/article/details/5769653 前段时间写了中文分词的一些记录里面提到了CRF的分词方法,近段时间又研究了一下,特把方法写下 ...

  9. Google NACL 简介

    Back to README Getting Started This page tells you how to install Native Client and run demos, both ...

  10. LA 2031

    Mr. White, a fat man, now is crazy about a game named ``Dance, Dance, Revolution". But his danc ...