栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 3871 Convex Hull

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 3871 Convex Hull

#include<iostream>#include<cmath>#include<algorithm>#include<cstdio>using namespace std;#define maxn 1001#define LL long long#define MOD 998244353struct node{    LL x,y;    double ang;    node(LL a=0,LL b=0):x(a),y(b){}    node operator - (node a){return node(x-a.x,y-a.y); }    LL operator ^ (node a){return x*a.y-a.x*y; }    bool operator < (const node &a)const{  return ang<a.ang;   }    void in(){scanf("%lld%lld",&x,&y); }    void out(){printf("%lld %lldn",x,y); }}p[maxn*2],s[maxn];int n;LL ex2[maxn];double PI =acos(-1.0);void init(){    for(int i=ex2[0]=1;i<maxn;i++)        ex2[i]=(ex2[i-1]*2)%MOD;}inline LL fix(LL a){    return (a%MOD+MOD)%MOD;}LL solve(int x){    swap(p[x],p[0]);    for(int i=1;i<n;i++) p[i].ang=atan2(p[i].y-p[0].y,p[i].x-p[0].x);    sort(p+1,p+n);    for(int i=1;i<n;i++){        p[n+i-1]=p[i];        p[n+i-1].ang+=2.0*PI;    }    LL res=0;    for(int i=1,j=1;i<n;i++){        while(p[j].ang<p[i].ang+PI)j++;        LL tmp=(ex2[j-i-1]-1)*((  (p[0]^p[i])%MOD  +MOD)%MOD)%MOD;        res=(res+tmp)%MOD;    }    return res%MOD;}int main(){    init();    int T;scanf("%d",&T);    while(T--){        scanf("%d",&n);        for(int i=0;i<n;i++){ p[i].in(); s[i]=p[i];        }        LL ans=0;        for(int i=0;i<n;i++){ for(int j=0;j<n;j++) p[j]=s[j]; ans=(ans+solve(i))%MOD;        }        printf("%lldn",ans);    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/372584.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号