Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
这么算为啥怎么都不对 谁有测试数据啊?#include <stdio.h> int xs[110]; int ys[110]; int m; int xmax; int xmaxp; double area; #define MAX(a, b) (((a>b)?(a):(b))) double get_area(int deltax, int pay, int pby) { return (pay + pby) * deltax * 0.5; } int calculate_points_inside() { int lb = 0; int ldb = 0; int points = 0; int cdp = 0; int cp = m - 1; double k, b; double ku, bu; int i, v; for(i = 0; i < xmax; i++) { int ca, cb; if (i < ldb) ca = (int)(k * i + b) + 1; if (i < lb) cb = (int)(ku * i + bu); if(xs[cdp] == xs[cdp+1]) { ca = MAX(ys[cdp], ys[cdp+1]); } else { k = (ys[cdp] - ys[cdp+1]) / (xs[cdp] - xs[cdp+1]); b = ys[cdp] - k * xs[cdp]; ldb = xs[cdp + 1]; ca = ys[cdp]; } if(xs[cp] == xs[cp-1]) { cb = MAX(ys[cp], ys[cp-1]); } else { ku = (ys[cp] - ys[cp-1]) / (xs[cp] - xs[cp-1]); bu = ys[cp] - ku * xs[cp]; lb = xs[cp - 1]; cb = ys[cp]; } v = cb - ca; points += (v > 0) ? (v - 1) : 0; } return points; } int main(void) { int n; int ohfuck; scanf("%d", &n); for(ohfuck = 1; ohfuck <= n; ohfuck++) { int cx = 0; int cy = 0; int i, pi; scanf("%d", &m); xmax = -1; area = 0; for(i = 0; i < m; i++) { int dx, dy; xs[i] = cx; ys[i] = cy; scanf("%d%d", &dx, &dy); if ((xmax == -1) && (dx < 0)) { xmax = cx; xmaxp = i; } cx += dx; cy += dy; if (xmax == -1) { area -= get_area(dx, ys[i], cy); } else { area += get_area(-dx, ys[i], cy); } } pi = calculate_points_inside(); printf("Scenario #%d:\n%d %d %.1lf\n\n", ohfuck, pi, (int)(((area - (double)pi + 1.) * 2.)), area); } return 0; } 我用pick反着的,用数点数形状里面的点。 样例没问题了,怎么测怎么WA.. Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator