HDU5784(n個點組成多少鈍角三角形,然而無論什麼三角形都是同理的)
題意:給你n個點,可以組成多少鈍角三角形。
分析:答案毋庸置疑,(銳角個數-(鈍角個數+直角)*2)、3;
暴力的方法,枚舉出所有的邊,然後在列舉角度,但是這樣是n^4的。太暴力
但是如果對斜率拍個序,這樣就能把兩兩角在銳角和鈍角的區間劃出來。再用雙指標列舉。複雜度就只有n^2*log(n)了。具體看程式碼。
#include<bits/stdc++.h> using namespace std; typedef long long ll; const double pi=acos(-1.0); const double eps=1e-9; int n; struct node1 { double x,y; }a[2010]; double node[4010]; int main() { while(scanf("%d",&n)!=EOF) { for(int i=1;i<=n;i++)scanf("%lf%lf",&a[i].x,&a[i].y); ll ans1=0,ans2=0; for(int i=1;i<=n;i++) { int cnt=0; for(int j=1;j<=n;j++) { if(i==j)continue; node[++cnt]=atan2(a[i].y-a[j].y,a[i].x-a[j].x); if(node[cnt]<0)node[cnt]+=2*pi; } sort(node+1,node+1+cnt); for(int j=1;j<=cnt;j++)node[j+cnt]=node[j]+2*pi; int l=1,r=1,len=1; for(int j=1;j<=cnt;j++) { while(r<=2*cnt&&node[r]-node[j]<pi)r++; while(l<=2*cnt&&node[l]-node[j]<0.5*pi)l++; while(len<=2*cnt&&node[len]==node[j])len++; ans1+=r-l; ans2+=l-len; } } //printf("%lld %lld\n",ans2,ans2); printf("%lld\n",(ans2-2*ans1)/3); } return 0; }
相關推薦
HDU5784(n個點組成多少鈍角三角形,然而無論什麼三角形都是同理的)
題意:給你n個點,可以組成多少鈍角三角形。 分析:答案毋庸置疑,(銳角個數-(鈍角個數+直角)*2)、3; 暴力的方法,枚舉出所有的邊,然後在列舉角度,但是這樣是n^4的。太暴力 但是如果對斜率拍個序,這樣就能把兩兩角在銳角和鈍角的區間劃出來。再用雙指標列舉。複雜度就只有n
hdu5424 Rikka with Graph II(n個點n條邊的圖判哈密頓通路)
Rikka with Graph II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 547
有n個帶編號的人和n個帶編號的座位,求每個人都不坐在相同號碼座位的方案數目
題目描述: 有 n 位同學編號分別為1, 2, ..., n; 有 n 個座位編號分別為1, 2, ..., n。 現在為每一位同學安排一個座位,求每個同學都坐在與自己編號不同的座位的方案數目。 分析:動態規劃思想: 假設 i 位同學,i 個座
農田開發 NOJ (已知N個點選取3個求最大三角形面積問題)
E - 農田開發時間限制(普通/Java) : 1000 MS/ 3000 MS 執行記憶體限制 : 65536 KByte總提交 : 83 測試通過 : 43 比賽描述有一塊農田,田地裡安放上N個小
(hdu step 7.1.6)最大三角形(凸包的應用——在n個點中找到3個點,它們所形成的三角形面積最大)
三角形 struct names com 都在 acm sni 都是 tran 題目:最大三角形Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S
階乘與排列的例子(從n個元素中取m個元素組成互不相同並且不重複的三位數)
public static void main(String[] args) { //1.編寫一個程式,輸入n,求n!(用遞迴的方式實現)。4*3*2*1=4! 注:0!=1 System.out.println("4的階乘為:" + getFactoria
hdu step 7 1 6 最大三角形 凸包的應用——在n個點中找到3個點 它們所形成的三角形面積最大
題目:最大三角形Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 121 Accepted Submission(s): 61
C++求解:平面上有n個點,問總共可以組成多少條直線
思路 對輸入的點,兩兩組合求取斜率,這樣可能會出現某一斜率對應多對點。然後對屬於同一斜率的多對點,當成一幅圖,求取連通分支個數。 這裡對對屬於同一斜率的多對點,當成一幅圖,求取連通分支個數解釋一下: 假設對於斜率k=1.0,有點對 (1,1) ,(2,2
n個點求 能構成多少個三角形
思路:1、先求出n個結點中取出三個結點 有多少種方法 C(n,3)的組合; 2、在找出三個點不能組成三角形的情況;有斜率相等和不存在斜率兩種情況; 完整程式碼如下: #include<ios
HDU6055空間內n個點能組成多少個正方形
#include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #
SPOJ3931(N個點形成三角形的最大面積)
題意:就是給定一些點,點的個數最多為50000,從這n個點中選3個點形成的三角形面積最大是多少? 分析:對於這個問題,在網上題解中各種方法都有,但是大部分都是不可靠的,現在我知道的最快的正確方法是 O(n^2)的。貌似還有O(nlog(n))的演算法。我們可
空間中任意三個點組成三角形面積
問題1:遍歷所有可能的3個點 1 2 3 for(int i = 0; i < n; i++) for(int j = i + 1; j < n; j++) for(int k = j + 1; k
數理統計 - 圓環上隨機取3個點組成一個銳角三角形的概率
dot and spl author span ted 密度 splay lag 問題 在一個圓環上隨機取3點,求這3個點組成一個銳角三角形的概率 題解 如下圖所示: 取單位圓上任意兩點點A和B,A、B兩點確定以後,點A、B、C三點要夠成銳角三角形,點C必須在DE之
C語言中可變參數的函數(三個點,“...”)
stdarg url title amp 至少 關閉 .com temp () C語言中可變參數的函數(三個點,“...”) 本文主要介紹va_start和va_end的使用及原理。 在以前的一篇帖子Format MessageBox 詳解中曾使用到va_st
最小割經典題(兩個點依附在一起的情況)poj3469
minimum 兩個 color computer upd 情況 nim %d struct Dual Core CPU Time Limit: 15000MS Memory Limit: 131072K Total Submissions: 25099
【XSY1295】calc n個點n條邊無向連通圖計數 prufer序列
ring pre end ctime 節點 splay 按順序 sin algorithm 題目大意 求\(n\)個點\(n\)條邊的無向連通圖的個數 \(n\leq 5000\) 題解 顯然是一個環上有很多外向樹。 首先有一個東西:\(n\)個點選\(k\
numpy_數組(三個點,無冒號,單冒號,雙冒號)
num span ... pre style IV AR color col import numpy >>> a = numpy.array([[1,2,3,4,5],[6,7,8,9,10],[1,2,3,4,5],[6,7,8,9,10]]) &g
E - Magic Points (0到4*n-5個點圍成正方形,最多交點)
滴答滴答---題目連結 Given an integer , we say a point on a 2D plane is a magic point, if and only if both and ar
a+aa+aaa+aaaa+aaaaa+......+aaaaa(n個a),java大數比c更簡單
開胃話:每次遇到大數的計算都沒來得及整理,今天覺得有必要以一道例題來總結一下了,c中一般都是用字串來解決的,而java中就可以用BigInteger來解決了,大家可以看看下面連結的這篇部落格,寫的比較完善的: https://blog.csdn.net/dongchengrong/art
並查集:按秩合併 $n$ 個點所得樹高不超過 $\lfloor\log n \rfloor$
用 $h_n$ 表示按秩合併 $n$ 個點所得樹的最大高度。 有 $h_1 = 0, h_2 = 1, h_3 = 1, h_4 = 2, h_5 = 2, \dots$ 有如下地推: \[ h_n = \max_{1\le i\le n-1} \max(h_i, h_{n-i}) + [h_i = h_{n