codeforces gym asc46A map预处理

来源:互联网 发布:relex软件模块 编辑:程序博客网 时间:2024/06/05 12:02

//能不用STL,就尽可能不用,毕竟太耗时。

//没必要将longlong 映射为一个int,反而耗时

//注意n*n,有时是可以将为n*n/2,此题很有用,毕竟有一个计算距离的式子

//时限给8s,但很多都是0s,求正解

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <queue>#include <vector>#include <string>#include <map>#include <cstdlib>#include <ctime>using namespace std;const int N = 3010;#define ll long longmap <pair<pair<ll, ll>, ll>, int> M;struct node{    ll x, y;} p[N];int n;ll zero[N];#ifdef ONLINE_JUDGE#define lld I64d#endifint main(){freopen("astronomy.in", "r", stdin);freopen("astronomy.out", "w", stdout);while (scanf("%d", &n) && n){    for (int i = 1; i <= n; ++i)    {        scanf("%lld %lld", &p[i].x, &p[i].y);        zero[i] = p[i].x * p[i].x + p[i].y * p[i].y;    }    pair<pair<ll, ll>, ll> q;    pair<ll, ll> q0;    M.clear();    for (int i = 1; i <= n; ++i)    {        ll a = zero[i];        for (int j = 1 + i; j <= n; ++j)        {            ll b = zero[j];            ll c = (p[i].x - p[j].x) * (p[i].x - p[j].x) + (p[i].y - p[j].y) * (p[i].y - p[j].y);                q0 = make_pair(a, b);                q = make_pair(q0, c);                M[q]++;                q0 = make_pair(b, a);                q = make_pair(q0, c);                M[q]++;        }    }    int m;    scanf("%d", &m);    for (int i = 1; i <= m; ++i)    {        ll a, b, c;scanf("%lld %lld %lld", &a, &b, &c);        q0 = make_pair(a, b);q = make_pair(q0, c);int ans = M[q];if (a == b) ans /= 2;printf("%d\n", ans);    }}return 0;}


0 0
原创粉丝点击