📄 1188.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 + -