• 格子手绢


    Description

    久城送给维多利加一块苏格兰格子手绢,可是手绢不小心被咖啡弄脏了,久城不得不负起清洗的责任。
    手绢的格子可以用二维坐标系来描述,手绢左下角坐标为 ((0,0)) ,右上角坐标为 ((N,M)) ,也就是说,手绢上一共有 (N imes M) 个格子。咖啡在手绢上形成了一个圆形的污点,圆心位于整点 ((X,Y)) 处,半径为 (R)。久城想知道,有多少个格子被完全污染了,多少个格子被部分污染了。
    这里,某个格子被“完全污染”的意思为该格内被污点覆盖面积 (=1) ,被“部分污染”的意思为 (0<) 该格内被污点覆盖面积 (<1)

    Input

    一行 (5) 个整数 (N,M,X,Y,R)

    Output

    一行两个整数,由一个空格隔开,表示被完全污染的格子数量和被部分污染的格子数量。

    Sample Input

    2 2 0 0 2

    Sample Output

    1 3

    数据范围

    对于 (100\%) 的数据, (N,Mle 1000000,0le Xle N,0le Yle M,Rle 1000000).

    Solution

    可意会不可言传

    #include<bits/stdc++.h>
    using namespace std;
    
    #define N 1000001
    #define rep(i, a, b) for (int i = a; i <= b; i++)
    #define drp(i, a, b) for (int i = a; i >= b; i--)
    #define fech(i, x) for (int i = 0; i < x.size(); i++)
    #define ll long long
    
    inline int read() {
    	int x = 0, flag = 1; char ch = getchar(); while (!isdigit(ch)) { if (!(ch ^ '-')) flag = -1; ch = getchar(); }
    	while (isdigit(ch)) x = (x << 1) + (x << 3) + ch - '0', ch = getchar(); return x * flag;
    }
    
    inline void write(int x) {
    	if (!x) { puts("0"); return; } if (x < 0) putchar('-'), x = -x;
    	char buf[30] = ""; int top = 0; while (x) buf[++top] = x % 10 + '0', x /= 10; while (top) putchar(buf[top--]);
    }
    
    ll n, m, X, Y, R, u, d, ans1, ans2;
    double l[N], r[N];
    
    int main() {
    	scanf("%lld%lld%lld%lld%lld", &n, &m, &X, &Y, &R); u = min(m, Y + R), d = max(0ll, Y - R);
    	rep(i, d, u) {
    		l[i] = X - sqrt(R * R - (ll)(Y - i) * (Y - i));
    		r[i] = min((double)n, (X << 1) - l[i]);
    		if (l[i] < 0) l[i] = 0;
    	}
    	rep(i, d, Y - 1) {
    		int l1 = ceil(l[i]), r1 = floor(r[i]); //全包含
    		int l2 = floor(l[i + 1]), r2 = ceil(r[i + 1]);
    		ans1 += r1 - l1;
    		ans2 += l1 - l2 + r2 - r1;
    	}
    	rep(i, Y, u - 1) {
    		int l1 = floor(l[i]), r1 = ceil(r[i]);
    		int l2 = ceil(l[i + 1]), r2 = floor(r[i + 1]);
    		ans1 += r2 - l2;
    		ans2 += l2 - l1 + r1 - r2;
    	}
    	printf("%lld %lld", ans1, ans2);
    	return 0;
    }
    
  • 相关阅读:
    javascript 杂记
    Sublime Text 3 杂记
    Visual Studio命令行工具
    iOS Crash日志
    Cocos引擎开发者指南(1-5)
    Linux防火墙配置(iptables, firewalld)
    jenkins使用git SCM时changelog乱码(Jenkins部署在Linux上,任务在Windows Slave上构建)
    C#枚举类型
    Java 实现大转盘抽奖
    HaspMap和ConcurrentHashMap
  • 原文地址:https://www.cnblogs.com/aziint/p/8416463.html
Copyright © 2020-2023  润新知