首页 > 其他分享 >Codeforces 70D. Professor's task

Codeforces 70D. Professor's task

时间:2023-03-22 23:46:47浏览次数:54  
标签:task return Point Professor operator 1ll 70D const cdx

题目链接:D - Professor's task

题目大意:初始给三个点,之后要求实现两种操作:加点;判断给定点是否在凸包内部。

动态凸包板子题,留档怕忘了,参考 https://www.cnblogs.com/enzymii/p/8413480.html

#include<bits/stdc++.h>
using namespace std;
#define N 100010
#define LL long long
struct Point
{
    int x,y;
    void read(){scanf("%d%d",&x,&y),x*=3,y*=3;}
    Point operator +(const Point &t)const{return {x+t.x,y+t.y};}
    Point operator -(const Point &t)const{return {x-t.x,y-t.y};}
    LL operator *(const Point &t)const{return 1ll*x*t.y-1ll*y*t.x;}
    Point operator *(const int &k)const{return {x*k,y*k};}
    Point operator /(const int &k)const{return {x/k,y/k};}
    bool operator ==(const Point &t)const{return x==t.x && y==t.y;}
    LL norm(){return 1ll*x*x+1ll*y*y;}
}G,A,B,C;
bool operator <(const Point &A,const Point &B)
{
    Point p1=A-G,p2=B-G;
    if(p1.x==0 && p1.y==0)return true;
    if(p2.x==0 && p2.y==0)return false;
    if(1ll*p1.y*p2.y<0)return p1.y>p2.y;
    LL Cr=p1*p2;
    if(Cr)return Cr>0;
    if(p1.y==0 && 1ll*p1.x*p2.x<0)return p1.x>p2.x;
    return p1.norm()<p2.norm();
}
set<Point>s;
typedef set<Point>::iterator cdx;
cdx pre(cdx it)
{
    if(it==s.begin())it=s.end();
    it--;return it;
}
cdx nxt(cdx it)
{
    ++it;
    if(it==s.end())it=s.begin();
    return it;
}
bool In(Point P)
{
    auto it=s.lower_bound(P);
    if(it==s.end())it=s.begin();
    LL Cr=(P-*pre(it))*(*it-P);
    if(Cr==0)return (P-*pre(it)).norm()<=(*it-*pre(it)).norm();
    return Cr<0;
}
void Ins(Point P)
{
    if(In(P))return;
    auto it=s.lower_bound(P);
    if(it==s.end())it=s.begin();
    s.insert(P);
    while(s.size()>3 && (*it-P)*(*nxt(it)-*it)<=0)
        s.erase(it),it=nxt(s.find(P));
    it=pre(s.find(P));
    while(s.size()>3 && (*pre(it)-*it)*(*it-P)<=0)
        s.erase(it),it=pre(s.find(P));
}
int q,o;
int main()
{
    scanf("%d",&q);
    q--,scanf("%d",&o),A.read();
    q--,scanf("%d",&o),B.read();
    q--,scanf("%d",&o),C.read();
    G=(A+B+C)/3;
    s.insert(A),s.insert(B),s.insert(C);
    while(q--){
        scanf("%d",&o),A.read();
        if(o==2)printf("%s\n",In(A)?"YES":"NO");
        else Ins(A);
    }
}

 

标签:task,return,Point,Professor,operator,1ll,70D,const,cdx
From: https://www.cnblogs.com/DeaphetS/p/17245905.html

相关文章

  • Taskkill
    115outof160ratedthishelpful - ​​Ratethistopic​​Endsoneormoretasksorprocesses.ProcessescanbekilledbyprocessIDorimagename.Syntaxta......
  • Spring线程池ThreadPoolTaskExecutor
    1.线程池配置@ConfigurationpublicclassTaskExecutorConfigimplementsAsyncConfigurer{@Value("${async.core.pool.size:10}")//核心线程数privateIn......
  • Java ThreadPoolTaskExecutor 线程池的常见问题
    JavaThreadPoolTaskExecutor线程池的常见问题 https://blog.csdn.net/weixin_43611528/article/details/123083314 重要参数corePoolSize:核心线程数,常开的线程数,默......
  • computer professor --
                         ......
  • Android AsyncTask异步任务的使用
    文章目录​​小结​​​​定义异步任务类​​​​开启异步任务​​​​参考​​小结可以使用androidAsyncTask来执行繁重的后台任务,以避免UI界面无响应,并可以实时在UI界面......
  • CF1801G A task for substrings
    题面传送门卡常的出题人什么时候似啊?如果\(l=1,r=|t|\),那么就是蠢得不能再蠢的问题:直接扔到AC自动机上跑匹配就好了,可以做到\(O(\sum|s|+|t|)\)。现在询问的变成了......
  • flutter项目运行时一直卡在Running Gradle task 'assembleDebug'... & Could not reso
    先是看了别人的文章  Flutter项目启动一直卡在RunningGradletask‘assembleDebug‘问题解决-灰信网(软件开发博客聚合)(freesion.com),做了同样的处理,但接着又报错......
  • C# 多线程task
    C#多线程task1.异步和多线程的区别?没什么太大区别。异步是目的,使用多线程实现。想想AJAX异步加载,不就是不想让浏览器界面卡住嘛,所以在程序中对于某些单独的操作,比如写......
  • C# task和timer实现定时操作
    C#task和timer实现定时操作C#中,定时器,或者叫作间隔器,每隔一段时间执行一个操作。1.Timer本身就是多线程C#中为不同场合下使用定时器,提供了不同的Timer类,在asp.net中......
  • 多线程 Task
    NetFramework4.0引入了一个新的关于异步操作的API,它叫做.任务并行库(TaskParallelLibrary,简称TPL),.NetFramework4.5版对该API进行了轻微的改进,使用更简单。TPL......