秦皇岛站2019CCPC A.Angel Beats

题意:平面内给定n个点,q次询问,给次给定一个点P,问这个点与平面内n个点可以组成多少直角三角形,其中(n+q)个点互不相等

思路:

分别考虑P点作直角顶点和非直角顶点。这个题思路很简单,就是看如何实现简单而且不会tle!!!

对于直角顶点和非直角顶点代码都比较简单,求后者有点离线的思想。

这里想说的就是map的用法,自定义小于运算符,使得在map中查找的时候,统一斜率的向量都会加起来,虽然在map中依然会保存多个不同的向量。(听说是现场一血的写法,中山大学大佬nb)

算法复杂度大概n*n*log(n)(由于n和p的范围一样,这里统一同n表示),运行时间10s左右

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 2005;
struct P
{
    ll x, y;
    P(ll xx=0, ll yy=0) {
        x = xx; y = yy;
    }
    P base()const{
        if (x < 0 || (x == 0 && y < 0))return P(-x, -y);
        return *this;
    }
    bool operator<(const P&b)const {
        P p1 = base(); P p2 =b.base();
       //如果共线,考虑是相同的索引
        return p1.x*p2.y<p1.y*p2.x;
    }
    P operator-(const P&b)const {
        return P(x - b.x, y - b.y);
    }
}a[N],qur[N];
int n, q;
map<P, int>m;
ll ans[N];
int main() {
    while (~scanf("%d%d", &n, &q)) {
        memset(ans,0,sizeof(ans));
        for (int i = 0; i < n; i++)scanf("%lld%lld", &a[i].x, &a[i].y);
        for (int i = 0; i < q; i++)scanf("%lld%lld", &qur[i].x, &qur[i].y);
        for (int i = 0; i < q; i++) {
          //求解作为直角顶点
            m.clear();
            for (int j = 0; j < n; j++)
                m[a[j] - qur[i]]++;
            for (int j = 0; j < n; j++) {
                P p = a[j] - qur[i];
                p = P(-p.y, p.x);
                ans[i] += m.count(p) ? m[p] : 0;
            }
       //由于两条直角边都会枚举,所以除2
            ans[i] /= 2;
        }
        for (int i = 0; i < n; i++) {
           //作为非直角顶点,每次枚举点i,作为直角顶点,更新全部的q组询问点
            m.clear();
            for (int j = 0; j < n; j++) {
                if (i != j)m[a[j] - a[i]]++;
            }
            for (int j = 0; j < q; j++) {
                P p = qur[j] - a[i];
                p = P(-p.y, p.x);
                ans[j] += m.count(p) ? m[p] : 0;
            }
        }
        for (int i = 0; i < q; i++)printf("%lld\n", ans[i]);
    }
     return 0;
}

原文地址:https://www.cnblogs.com/gzr2018/p/11605356.html

时间: 2024-11-10 18:04:44

秦皇岛站2019CCPC A.Angel Beats的相关文章

JZOJ 4639 Angel Beats!【NOIP2016提高组A组7.16】

Angel Beats! (这是一部日漫,7.16的出题人好神奇,名字都来自于影音作品) 题目大意 给你一棵1为根的树,然后会有q个询问,向你查询点x子树和点y子树的重心,重心可能会有很多个,你只需要输出距离和即可. 两棵子树的重心的定义如下:在树上找到一个点,使得该点到两棵子树中所有点距离之和最小,即这两棵子树的重心. 输入格式 第一行一个整数 ,代表点的数量. 接下来 n-1行,第i 行的表示节点i 的父亲节点. 接下来一个整数q ,为询问的个数. 接下来q 行,每行两个数x,y ,表示查询

【分享】Angel Beats! 遊戲合集(同人,試玩,ONS安卓體驗版,h同人 )

Angel Beats! 同人RPG游戏v1.0[無語音,帶BGM.角色扮演遊戲,漢化版] 預覽: 操作:[Z]菜單,確定,對話鍵,[X]返回,[Enter回車鍵]對話],[↑↓← →]行走鍵. 下載地址:http://www.400gb.com/file/81157758 AngelPlan!Ver.0试玩版[有語音和BGM,漢化版] 預覽: 下載地址:http://www.400gb.com/file/81157749 Angel Beats! TrackZERO 试玩版[無語音,有BGM,

【2019CCPC秦皇岛:A】Angle Beats 分类讨论 (unordered_map 加 hash)

题意:n个给定点,q个询问点,每次询问给出一个坐标A,问从n中选定两个点B,C,有多少种方案使得ABC是个直角三角形. 思路:直角三角形能想的就那几个,枚举边,枚举顶点,这个题都行,写的枚举顶点的,A点分两种情况,1是直角,2是非直角.防止误差,用分数表示斜率,然后用了map<pair<int,int> int> 发现t了,改成unordered_map发现这个unordered_map只能映射一个,即unordered_map<ll, int>,所以得用到hash,把

2018CCPC秦皇岛站

这次去秦皇岛,两个队都打铁回来,真的是蛮耻辱的 可以说是有史以来最差成绩了 其实网络赛就打的不好 两个名额一个是省赛分配的一个是排队排来的 去之前拉了几场之前的CCPC的比赛打 感觉打的都还不错的 热身赛那天也还不错 现场赛的时候先被C卡了很久 可能心态就有一些崩了 之后被G卡了很久 三个人各写了一发 最后也没过 虽然说这次题面写的不好有一点问题 但是自身还是有几点要注意的 1.对自己写的代码太不自信 比如G题,最后发现WA的点应该是n==1时的特判 有想到过n==1的时候会怎么样 但是感觉题目

【NOIP模拟】Angel Beats!

Description 天使立华奏攻入了死后世界战线(SSS)的地下工会Guild,这是万分危急的时候.仲村由理指挥工会成员有条不紊地进行撤退工作.工会成员在Guild最深层工厂安放炸药需要很长的准备时间,需要有人来拖延立华奏的前进速度.但是他们并不清楚立华奏的具体位置,因此他们需要设立许多个防御点. Guild的结构可以看成一棵有n 个节点的树,有时由理会得到立华奏的大概位置,可能在某两棵子树的任意一棵中,她就会找到Guild树(不一定要在两棵子树内)上的一个点,使得该点到两棵子树中所有点距离

三个倒霉鬼的CCPC秦皇岛打铁记

出发: 2019年9月20日凌晨四点,我和Dicer还有凯凯踏上了前往秦皇岛的火车,一趟神奇的旅途就这样开始了... 第一次坐那么久的火车,虽然是硬卧,但是有些难受,由于空调吹冷风,结果,我感冒了.. 到了宾馆已经晚上十点半了,又饿又困,然后晚上点了40+的外卖,实不相瞒,没有学校的正新鸡排好吃多了.洗了个热水澡就睡觉了. 报道 宾馆和东大秦皇带分校离得很近,步行了20分钟就到了,报道完就在食堂摸鱼...午饭吃的也挺淡的,忘了说一句我袋子又又又忘了拿了(心累). 热身赛 我觉得热身赛就表明了这场

Virtual方法(虚方法)和Abstract方法(抽象方法)

一.Virtual方法(虚方法) virtual 关键字用于在基类中修饰方法.virtual的使用会有两种情况:情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法.那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法.情况2:在基类中定义了virtual方法,然后在派生类中使用override重写该方法.那么在对派生类实例的调用中,该虚方法使用的是派生重写的方法. 当一个方法被声明为Virtual时,它是一个虚拟方法,直到你使用ClassName variable =

HTML5+CSS3+jquery实现简单的音乐播放器

...最近天热的,感觉就像煎饼...然后别人在把妹子的时候,只有偶们这帮苦逼的程序员在那边撸代码...我日哦! 然后今天晒的是偶早年写的一个播放器...看上去是不是很有感觉的样子!一番宝物,Lisa唱的   在angel beats的插曲 最后在简述这个东西怎么写之前,本人男,24岁,籍贯上海,诚招女友一枚,要求:性格温顺...(省略500字) <div class="Music"> <div class="MusicPlaySound">

好看的动漫

什么火影.海贼.死神.妖尾这种超长篇就不多说了,你没说喜欢那类型的,就推荐些我看过觉得不错的各种类型的动漫.... 零之使魔 ——热血+魔法+搞笑后宫的.钉宫巅峰作 进击的巨人——去年最火的番,没看过的话推荐去看,剧情制作都挺精良的. 反叛的鲁鲁修——神作,看了不后悔.剧情也是神展开,人物刻画非常到位 罪恶王冠——鲁鲁修原班人马打造,看着音乐.画面都知道是预算在燃烧.剧情虐心向,结尾有些仓促,但仍然是佳作. 革命机——机战类,鲁鲁修和罪恶王冠编剧大河内一楼的剧本加上sunrise的机战功底,值得