巨人與鬼:
題目:2
0 0 1 2
2 1 -1 4
樣例輸出(有可能有多種匹配方案,只要符合要求即可):
0--2
1--3
這一題書上說是分治+遞迴,但是筆者剛開始只是當成數理題做,並沒有意識到其分治的思想,下面的**也是按照筆者最開始的數理方法寫的,分治思想的**之後再補上。
1 .首先,要如何想到這種極座標的結構呢?事實上,可以這麼想:對於乙個巨人a,比如下圖遠點位置的藍圓圈,總要有乙個鬼和它配對(題中說n個鬼,n個巨人),因此,現在我們要在n個鬼當中選1個鬼給巨人a懟,這樣就很自然地想到以該巨人a為原點,鬼們繞著這個巨人,這樣再來考慮如何選鬼被巨人a懟會直觀一些,考慮到題目中說,
因此我們還要考慮其它巨人的空間位置。
#include#include#includeusing namespace std;
#define maxsize 1005
#define inf 10000000
/*input example:
20 0 1 2
2 1 -1 4
30 0 2 2 1 3
3 0 -1 4 -2 1
*/struct monster
a[maxsize], angle[maxsize];
int visit[maxsize];
bool cmp(monster a, monster b)
else
else
return x2*y1 < y2*x1; }}
void sortbyangle(int centerind,int n)
for (i = 0;i < n;i++) }
sort(angle, angle + k, cmp); }
int main()
//input ghosts' position
for (i = n;i < 2*n;i++)
/* check whether the input is correct.
for (i = 0;i < 2 * n;i++)
cout << a[i].ind << " " << a[i].x << " " << a[i].y << endl;
*/ int s = 2*n;
int fstmgst = 0;
while(s)
}//sort a and then asign to angle.
sortbyangle(centerind, 2 * n);
for (i = 0;i < s;i++)
if(visit[angle[i].ind]==0)
{if (angle[i].cat == 0 && fstmgst == 0)
{//match centerind and angle[i].ind
cout << centerind << "--" << angle[i].ind《如有錯誤,希望各位踴躍指出。
演算法競賽入門經典 1
想著要學演算法已經很長時間了,但一直都是有問題自己想,很少受 正規軍 編排,網上關於演算法的書倒是不少,其一必推 演算法導論 還有一本 演算法競賽入門經典 作者劉汝佳,好了,步入正題,兩天時間從第一章到第三章結尾,算是對c又進行了一遍複習,說一下新得 3d 3d 03d 知道它們的區別嗎,在呼叫pr...
演算法競賽入門經典 WERTYU
題目描述 把手放在鍵盤上時,稍不注意就會往右錯一 位。這樣,輸入q會變成輸入w,輸入j會變成輸 入k等。鍵盤如圖3 2所示。輸入乙個錯位後敲出的字串 所有字母均 大寫 輸出打字員本來想打出的句子。輸入保 證合法,即一定是錯位之後的字串。例如輸入中不會出現大寫字母a。樣例輸入 o s,gomr ypf...
演算法競賽入門經典例題
7744問題 問題 輸出所有形如aabb的四位完全平方數 即前兩位數字相等,後兩位數字也相等 include include int main 開燈問題 include include define maxn 1010 int a maxn int main int n,k,first 1 mems...