POJ 2991 Crane

POJ_2991    如果我們將其中某一個線段旋轉β角,那麼這個線段上方的所有線段都會旋轉β角,這就很類似線段樹中的對區間加上一個常數的問題了,於是不妨向著線段樹的思路去想。   

HDU 3954 Level up

HDU_3954    一開始始終在糾結要怎樣維護max,因為不同等級的人每次加的經驗是不一樣的,這樣如果只用一個max來維護最大值的話是很難辦的。看了胡浩的出題報告之後恍然大悟,既然一個max來維護是很難辦的,那不妨就將max變成K個,max[i]表示等級為i的人的經驗的最大值,這樣max[i]的增加就很好處理了。   

URAL 1039 Anniversary Party

   

WHU 1124 Football Coach

WHU_1124    首先對於有N參加的比賽,肯定是贏了最好,暫時先不考慮其他的比賽,這是如果各隊的積分有大於或等於第N隊的,那麼肯定是輸出NO的。   

POJ 3368 Frequent values

POJ_3368    本來想找個RMQ問題練一下今天剛學的ST演算法,結果這個題我用ST做不出來,所以只好又用回線段樹解法了。    當然dicuss裡面有人說也可用ST去做的,我就只說一下我用線段樹去做的思路吧。   

POJ 1106 Transmitters

POJ_1106    首先,我們可以把圓以外的點去掉。    之後,一開始想到的是枚舉直徑和x軸的夾角去算,但這樣精度不能保證,而且不好算,於是否決掉了。    後來想了一下,這個題目實際可以轉化成一個圓裡面有一些點,然後用一條直徑把圓切成兩半,這樣哪一半裡面的點多就取哪一半。同時不難想到,一定可以構造出這條直徑過某個點且切完之後可以得到最優解的情況,因為如果這條直徑不過任何一個點,我們就可以將其旋轉使其過某一點,同時這樣不會影響到解的最優性。   

POJ 3384 Feng Shui

POJ_3384    題目的意思是說在多邊形內安排兩個圓,使得兩個圓覆蓋的地區儘可能大(重合的部分只算一次),求兩個圓的圓心座標。    首先,受POJ_3525這個題目的啟發,我們先將凸多邊形的邊都向內收縮R,這樣得到了一個新的凸多邊形(新凸多邊形的各個頂點可以通過求半平面交得到),那麼兩個圓的圓心必定在這個新凸多邊形中,否則就會和原來的凸多邊形的某條邊相交。   

HDU 2492 Ping pong

HDU_2492    由於N比較大,枚舉兩個隊員並計算其中有多少個裁判是行不通的,不妨換一種思路去枚舉裁判,這樣對於任意一個裁判而言,不同的比賽場數等於左邊小於裁判skill rank的人數乘以右邊大於裁判skill rank的人數,再加上右邊小於裁判skill rank的人數乘以左邊大於裁判skill rank的人數。    在計算人數的時候,可以維護記錄分別記錄左右兩邊各個skill

POJ 3255 Roadblocks

POJ_3255    本來想做POJ_2449的,結果自己想的這個演算法TLE,看來解決那個題只能搞A*了。    這個題目由於求次短路,第K短路的K就是2,比較小,所以可以直接用純dij搞。我的思路就是把圖上每個點搞一個容量不小於K的最大堆和最小堆,最小堆用於取到達當前該節點的第某短路值,最大堆用來儲存前K小的最短路。   

HDU 3397 Sequence operation

 HDU_3397     感覺這種維護序列的題目就是填代碼,把每種操作的模組寫好就OK了。更多和區間合并相關的問題可以參考胡浩的部落格http://www.notonlysuccess.com/index.php/segment-tree-complete/。    為了方便實現各種操作,可以引入lc[0/1](left contiguous)表示一個區間從左邊開始連續最長0/1是多少,rc[0/1](right contiguous)表示一個區間從右邊開始連續最長的區間0/1是多少,mc[0

HDU 1024 Max Sum Plus Plus

HDU_1024    可以用f[i][j]表示掃描到第j個元素時且一共選i個區間的最優解,這樣可以得到f[i][j]=max{f[i][j-1],f[i-1][k]+A[j]-A[k]}(i-1<=k<j),其中A[]表示首碼和。    如果不加最佳化的話是O(MN^2)的演算法,但實際上我們可以在遞推的過程中維護x=f[i-1][k]-A[k]的最大值,那麼動態轉移方程就改寫成了f[i][j]=max{f[i][j-1],x+A[j]},這樣就是O(MN)的複雜度。    此外,

HDU 1171 Big Event in HDU

HDU_1171    這個題目可以用產生函數的思路去做,也可以用多重背包的思路去做,而且用多重背包的思路做時可以參考《背包九講》裡面的二進位最佳化多重背包問題那一塊,這樣做效率更高。    另外多重背包問題用單調隊列最佳化之後還可以達到O(VN)的效果,我暫時還沒有學,所以就唯寫了這個二進位最佳化的版本。//產生函數#include<stdio.h>#include<string.h>#define MAXD 60#define MAXM 130000int N, S,

POJ 2892 Tunnel Warfare

POJ_2892    這個題目用splay去想還是比較直接的,但之所以感覺思路比較直接,也是因為前面又鞏固、學習了一下線段樹的一些對於區間合并的操作,更多的涉及線段樹區間合并的題目可以參考胡浩的部落格http://www.notonlysuccess.com/index.php/segment-tree-complete/。   

HNU 10694 Primitive Root

HNU_10694    這個題目本質上就是去求模p的原根。    首先,我們用反證法證明這個結論:如果對於任意的正整數i,r^i%p包含了1~p-1所有整數的話,那麼滿足r^i%p=1這個等式的最小正整數為p-1。    如果上面的命題不成立,不妨設滿足r^i

SGU 225 Little Knights

 SGU_225由於在dp的時候需要記錄上面兩行放置馬的狀態,以及馬的數量,這樣狀態數就相當多了,直接交寫完的dp就TLE了。暫時沒有想到好的辦法,所以拿自己dp的程式打了個表交上去AC了。// 注意:這個程式是用來打表的,並不是可以直接提交的程式。#include<stdio.h>#include<string.h>#define MAXD 20#define HASH 100007#define SIZE 2000010int N, K, ucode[MAXD],

SGU 114 Telecasting station

SGU_114    這個題目乍看起來沒什麼思路,但如果隨便挑一個點作為station,然後分別左右移動一下看看移動之後能夠減少多少不滿同時又會增加多少不滿,思路便瞬間有了。#include<stdio.h>#include<string.h>#include<stdlib.h>#define MAXD 15010int N, x[MAXD], p[MAXD], r[MAXD];long long int A[MAXD];int cmp(const void

SPOJ 5151 Alice’s Cube

    一開始反應的是用狀態壓縮dp來做,後來一看步數很小,只有三步,於是直接暴力就可以了。另外由於測試資料比較多,可以先從最終狀態BFS一遍,保留下所有結果,然後每次判斷就是O(1)的了。#include<stdio.h>#include<string.h>#define MAXD 20#define MAXM 160#define MAXS 100010#define INF 0x3f3f3f3fint first[MAXD], e, dis[MAXS], next[

HDU 1941 Justice League

HDU_1941    這個題目說白了就是要刪掉一些點,而且被刪掉的點兩兩之間不能有邊,留下的點兩兩之間必須有邊,也就是構成一個完全圖。    乍看起來是沒啥思路的,不過大概有兩條路子可以走,要麼先考慮什麼樣的點一定會留下來,要麼就先考慮什麼樣的點一定會被刪掉。想想之後覺得第二條路子還可行一些,於是就開始想吧。   

POJ 1486 Sorting Slides

POJ_1486    這個題目相當於判斷是否存在唯一的二分圖最大匹配的問題,只不過最後即便沒有唯一的二分圖最大匹配,也將已經匹配好的輸出即可。    在匹配的時候採用貪心的策略,如果當前有一個點只連了一條邊,那麼就一定可以唯一的確定出一個匹配,然後不停的這樣找直到找完這樣的點為止,剩下的如果還有點沒進行匹配,那麼剩下的點的匹配就不是唯一的了。#include<stdio.h>#include<string.h>#define MAXD 30int N, xM[MAXD]

UVA 11995 I Can Guess the Data Structure!

UVA_11995    如果還可能是某個資料結構的話,就對其類比操作,知道出現錯誤為止。#include<stdio.h>#include<string.h>#include<algorithm>#define MAXD 1010int N, D, max[4 * MAXD], q[MAXD], s[MAXD];void init(){ for(D = 1; D < N + 2; D <<= 1); memset(max, 0,

總頁數: 61357 1 .... 8773 8774 8775 8776 8777 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.