給定n個點,求出這些點一共可以構成多少個正方形。
sample input
4sample output1 00 1
1 10 0
90 0
1 02 0
0 21 2
2 20 1
1 12 1
4-2 5
3 70 0
5 20
1可列方程:61
可以得出 ;知道兩點求出其餘兩點
x3 = node[i].x + (node[i].y - node[j].y);
y3 = node[i].y + (node[j].x - node[i].x);
和 x4 = node[j].x + (node[i].y - node[j].y);
y4 = node[j].y + (node[j].x - node[i].x);
或者
x3 = node[i].x - (node[i].y - node[j].y);
y3 = node[i].y + (node[i].x - node[j].x);
x4 = node[j].x - (node[i].y - node[j].y);
y4 = node[j].y + (node[i].x - node[j].x);
然後列舉兩點就行
利用雜湊表;
**:
#include#include#include#includeusing namespace std;
const int mul = 27;
const int mod = 5013;
int nexts[5025], last[5025];
struct point node[5025];
bool m_z(int va, int x, int y)
pre = nexts[pre];
} return false;
}int main()
for(int i=0;ifor (int j = i + 1; j < n; j++)
x3 = node[i].x - (node[i].y - node[j].y);
y3 = node[i].y + (node[i].x - node[j].x);
x4 = node[j].x - (node[i].y - node[j].y);
y4 = node[j].y + (node[i].x - node[j].x);
if (m_z((((x3*mul + y3) % mod + mod) % mod), x3, y3) && m_z((((x4*mul + y4) % mod + mod) % mod), x4, y4))
}cout << ans/4 << endl;
} return 0;
}
POJ 1018 列舉 貪心
題意 有n件商品,每件商品有m個製造商,每個製造商製造的商品有不同的 頻寬和 每件商品必須選乙個製造商,最後的頻寬是所有頻寬中的最小值,價值是所有商品的總 目的是使b p最大,輸出最大的b p的值。思路 由於資料範圍比較小,所以可以列舉。可以求出所有製造商的商品的最大頻寬和最小頻寬,然後列舉在兩者之...
poj1873 列舉 凸包
題意 平面上有n棵樹,現在要砍掉其中的一部分來做成籬笆將剩下的樹包圍起來,現在給出每棵樹的座標 價值和可以製造籬笆的長度,求砍掉最少價值的樹,將剩下的樹包圍起來,當兩種方式的價值相同時,取砍掉樹更少的方式。由於樹棵樹不大於15,可以二進位制列舉情況,求出其它樹構成的凸包的周長即可 include i...
POJ 2699 列舉 最大流
這應該說是比較神的乙個題目了 題意的話,就是有n 個人,兩兩之間打比賽,每場比賽贏的人加一分,總共呢有n n 1 2個比賽,然後求這樣一種人的個數,就是能贏所有比自己分高的人或者他就是分最高的人。當然我們是求這種人可能的最大個數,建圖的話,就要分兩種點,人和比賽,很顯然,源點到所有的人建邊,容量是該...