CSU->1011: Counting Pixels

1011: Counting Pixels

          Time Limit: 1 Sec     Memory Limit: 128 Mb   

Description

Did you know that if you draw a circle that fills the screen on your 1080p high definition display, almost a million pixels are lit? That’s a lot of pixels! But do you know exactly how many pixels are lit? Let’s find out!

Assume that our display is set on a Cartesian grid where every pixel is a perfect unit square. For example, one pixel occupies the area of a square with corners (0,0) and (1,1). A circle can be drawn by specifying its center in grid coordinates and its radius. On our display, a pixel is lit if any part of it is covered by the circle being drawn; pixels whose edge or corner are just touched by the circle, however, are not lit.

counting_pixels_example

Your job is to compute the exact number of pixels that are lit when a circle with a given position and radius is drawn.

Input

The input consists of several test cases, each on a separate line. Each test case consists of three integers, x,y, and r(1≤x,y,r≤1,000,000), specifying respectively the center (x,y) and radius of the circle drawn. Input is followed by a single line with x = y = r = 0, which should not be processed.

Output

For each test case, output on a single line the number of pixels that are lit when the specified circle is drawn. Assume that the entire circle will fit within the area of the display.

Sample Input

1 1 1
5 2 5
0 0 0

Sample Output

4
88

Hint

Source

中南大学第五届大学生程序设计竞赛

题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1011

题解:将圆分成四部分,再使用勾股定理,求其一部分的亮方格数,一圆中心开始对r*r-i*i
即可得出每一竖的亮方格数。(注意数据范围!!!)具体看代码:

扫描二维码关注公众号,回复: 2481053 查看本文章
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;

int main(){
    ll x,y,r,sum=0;
    while(scanf("%lld%lld%lld",&x,&y,&r)!=EOF){
        if(x==0&&y==0&&r==0){
            break;
        }
        sum=0;
        for(ll i=0;i<r;i++){    
            sum+=(ll)ceil(sqrt((double)(r*r-i*i)));//四舍五入
        }
        printf("%lld\n",(ll)4*sum);
    }   
    return 0;
}

猜你喜欢

转载自blog.csdn.net/wuyileiju__/article/details/81092981
今日推荐