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 |
从3700ms到700ms,仅仅是因为变量定义的位置不同?#include <iostream> #include <algorithm> using namespace std; struct point { short x, y; }; int comp (const void *a, const void *b) { if (((point*)a)->x > ((point*)b)->x) return 1; if (((point*)a)->x < ((point*)b)->x) return -1; return ((point*)a)->y - ((point*)b)->y; } point p[5001]; bool tab[5001][5001]; int main() { // freopen("1.txt", "r", stdin); short max, tmp, r, c, n, i, j, cx, cy, dx, dy; // 如果把此处的变量定义成全局变量的话,耗时就是3700ms了 bool flag; max = 0; cin >> r >> c >> n; for (i = 0; i < n; ++i) { scanf ("%d %d", &p[i].x, &p[i].y); tab[p[i].x][p[i].y] = true; } qsort (p, n, sizeof (point), comp); for (i = 0; i < n; ++i) { for (j = i + 1; j < n; ++j) { dx = p[j].x - p[i].x; dy = p[j].y - p[i].y; cx = p[i].x - dx; cy = p[i].y - dy; if (cx >= 1 && cy >= 1 && cy <= c) continue; if (dx && dx * max > r) continue; if (dy && (dy * max > c || -dy * max > c)) continue; cx = p[j].x + dx; cy = p[j].y + dy; tmp = 2; flag = true; while (cx <= r && cy <= c && cy >= 1) { if (!tab[cx][cy]) { flag = false; break; } cx += dx; cy += dy; tmp++; } if (flag && tmp > 2 && tmp > max) max = tmp; } } cout << max << endl; return 0; } 哪位大牛来告诉我为什么? Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator