HDU5738 2016 Multi-University Training Contest 2 (组合数学+极角排序)
来源:互联网 发布:mac office2016机锋 编辑:程序博客网 时间:2024/04/28 15:04
#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<algorithm>using namespace std;struct node{ int x,y; long double ang;}pot[1005],tmp[1005];bool cmp(node a,node b){ if(a.x==b.x) return a.y<b.y; return a.x<b.x;}bool comp(node a,node b){ return a.ang<b.ang;}const int mod=1e9+7;const long double eps=1e-12;long long e[1005]={1};void init(){ for(int i=1;i<1005;i++) e[i]=e[i-1]*2%mod;}int main(){ //freopen("1005.in","r",stdin); //freopen("1005outt.txt","w",stdout); int t,n,i,j; long long res,ans; init(); scanf("%d",&t); while(t--&&scanf("%d",&n)!=EOF) { memset(pot,0,sizeof(pot)); memset(tmp,0,sizeof(tmp)); for(i=0;i<n;i++) scanf("%d%d",&pot[i].x,&pot[i].y); sort(pot,pot+n,cmp); for(i=0,ans=0,res=0;i<n-1;i++) { int sx=pot[i].x,sy=pot[i].y,sum=0,cnt=0,num=0,d=0; for(j=i+1;j<n;j++) { if((sx==pot[j].x)&&(sy==pot[j].y)) { sum++; continue; } tmp[cnt]=pot[j]; tmp[cnt++].ang=atan2((long double)(pot[j].y-sy),(long double)(pot[j].x-sx)); } sort(tmp,tmp+cnt,comp); for(int i=0;i<cnt;) { num=sum+1; int j; for(j=i+1;j<cnt;j++) { if(fabs(tmp[j].ang-tmp[i].ang)>eps) break; num++; } i=j; ans=(ans+e[num]-1)%mod; d++; } ans=(ans-(long long)((d-1)*(e[sum]-1+mod))%mod+mod)%mod; } printf("%lld\n",ans); } return 0;}
0 0
- HDU5738 2016 Multi-University Training Contest 2 (组合数学+极角排序)
- 2016 Multi-University Training Contest 2-1005(hdu5738) Eureka
- 2016 Multi-University Training Contest 2 Acperience
- 2016 Multi-University Training Contest 2
- 2016 Multi-University Training Contest 2 Acperience
- 2016 Multi-University Training Contest 2 Acperience
- 2016 Multi-University Training Contest 2 Eureka
- 2016 Multi-University Training Contest 2
- 2016 Multi-University Training Contest 2
- 2016 Multi-University Training Contest 2
- 计算几何(组合计数+向量排序)——Eureka ( HDU 5738 ) ( 2016 Multi-University Training Contest 2 1005 )
- (HDU 5726)2016 Multi-University Training Contest 1 GCD(数学)
- 【HDU5738 2016 Multi-University Training Contest 2E】【平面点数计数 共线判定】Eureka 平面有多少个集合满足贡献
- hdu 5821 2016 Multi-University Training Contest 8(排序)
- 2016 Multi-University Training Contest 2 hdu 5734 Acperience【推公式,数学】
- 数学——Acperience ( HDU 5734) ( 2016 Multi-University Training Contest 2 1001 )
- 2016 Multi-University Training Contest 2 1001 Acperience (简单数学)
- 2016 Multi-University Training Contest 2 1011 Keep On Movin (简单数学)
- PHP大量数据循环时内存耗尽问题的解决方案
- 1016. 部分A+B (15)-PAT乙级真题
- 程序存储杂记
- 理解镜像、容器和存储驱动
- AndroidManifest.xml文件解析
- HDU5738 2016 Multi-University Training Contest 2 (组合数学+极角排序)
- 精通 Oracle+Python,第 5 部分:存储过程、Python 编程
- PHP中实现异步调用多线程程序代码
- 安卓驱动陀螺仪代码
- AngularJS API
- Tomcat的性能与最大并发(1000)
- ATS上的hosting.config和volume.config文件解读
- MPD+FreeRadius做PPPoE限制用户多次登录
- 原码、反码、补码