⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1188.cpp

📁 这是哈尔滨工业大学acmOJ的源代码
💻 CPP
字号:
/*  This Code is Submitted by wywcgs for Problem 1188 on 2006-02-24 at 16:16:36 */ 
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;

const double eps = 1e-5;

double x[3], y[3];

int hori(int);
inline int up(double m) { return max((int)(ceil(m-eps)), 1); }
inline int down(double m) { return min((int)(floor(m+eps)), 99); }
inline bool integer(double m) { return fabs(m-up(m)) < eps; }

int main()
{
	int i;

	while(true) {
		bool end = true;
		for(i = 0; i < 3; i++) {
			scanf("%lf %lf", &x[i], &y[i]);
			if(fabs(x[i]) > eps || fabs(y[i]) > eps) end = false;
		}
		if(end) break;
		int d = 200, u = 0, total = 0;
		for(i = 0; i < 3; i++) { d = min(d, up(y[i])); u = max(u, down(y[i])); }
		for(i = d; i <= u; i++) total += hori(i);
		printf("%4d\n", total);
	}
	
	return 0;
}

int hori(int cy)
{
	int i, xn = 0, tn = 0; double xl[8];
	for(i = 0; i < 3; i++) {
		if(cy < min(y[i], y[(i+1)%3]) || cy > max(y[i], y[(i+1)%3])) continue;
		double dy = y[(i+1)%3]-y[i], dx = x[(i+1)%3]-x[i], cdy = cy-y[i];
		if(fabs(dy) < eps) {
			if(fabs(dx) < eps && integer(x[i]) && integer(y[i])) xl[xn++] = x[i];
			else if(fabs(y[i]-cy) < eps) xl[xn++] = x[i], xl[xn++] = x[(i+1)%3];
			continue;
		}
		xl[xn++] = dx * cdy / dy + x[i];
	}
	sort(xl, xl+xn);
	for(i = 0; i < xn; i++)
		if(i == 0 || fabs(xl[i]-xl[i-1]) > eps) xl[tn++] = xl[i];
	if(tn == 0) return 0;
	return down(xl[tn-1])-up(xl[0])+1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -