Time of Update: 2018-12-05
BNUEP1202 PKU3363 Annoying painting
Time of Update: 2018-12-05
最近在學win32的多線程,感覺很好玩。還是比較喜歡C語言的簡潔,我總覺得MFC幹擾的要素太多了,讓人不能集中精力做核心代碼,花在做介面上的時間太多。這個程式是用C語言寫的,用了win32提供的多線程做。雖然整個程式可以完全不用多線程也能實現,但是作為練習寫一寫感覺還是蠻好~記得上次做龜兔賽跑的時候完全沒有用win32函數,為了實現延時(delay),調用了時間函數計時,然後不停的空迴圈……現在想想真是愚蠢,用win32的Sleep就行了,而且不會佔用CPU資源。---------代碼:#inc
Time of Update: 2018-12-05
題目描述:用一種L形骨牌(長3寬2)覆蓋一個M×N的矩形地板,問能否完全覆蓋。若不能,輸出最少不能覆蓋的方塊數。分析:先解釋一下題目 ,骨牌樣子如。題目中沒有說明M,N的範圍。實際資料中可能長達100位…… 推規律推了半天,只找到一些皮毛規律。最初的想法是,2個L骨牌拼成一個2×4的矩形,從大尺度來看,就像一個1×2的多米諾骨牌~
Time of Update: 2018-12-05
題目大意:有n根棍子(n<250000),每根棍子兩端都塗上顏色,顏色用長度小於10的字串表示,問能否將所有的棍子排成一排,使得每兩根棍子銜接的地方顏色相同.分析:題目很明確,將所有的顏色看做節點.串連兩種顏色的棍子看做節點之間的連邊.問是否存在一條歐拉通路.用字典樹的目的是給每種顏色編號.用並查集來判斷無向圖是否連通.最後要做的就是統計每種顏色的出現次數了. /*PKU2513 Colored Sticks*/#include <stdio.h>
Time of Update: 2018-12-05
題目描述:給定一個長度為n的數字序列a[i],接下來輸入m個數b[i],對於每個數字,在a[]中找出兩個數字x,y,使得b[i]在區間[ x , y )內,要求這個區間長度盡量小。分析:其實題目就是要求在排序後的序列a[]中,找到某個位置k使得 a[k]<=b<a[k+1]。然後輸出a[k]和a[k+1]即可。很明顯可以使用二分尋找法。似乎資料很弱…… 用qsort和n^2排序都是0.00秒。但是只有200多的AC人數,實在難以理解……#include <stdio.h>
Time of Update: 2018-12-05
題目大意:給出一個數位英文單詞,輸出對應的數字。如“two hundred twenty two”表示222。分析:首先將讀入的字串轉換為數字數組,例如,以上字串就存為2,100,20,2。想了很久不知如何用一個簡練的方式來處理。後來用了一個遞迴的方法。函數int work(int L,int
Time of Update: 2018-12-05
windows程式設計做的練習。高中的時候就是靠物理吃飯的,學了windows編程很期待能用一用。這個程式就是類比了許多剛體小球在平面上運動,當兩球撞在一起時按照動量守恒定理改變兩球的運動速度。地面和小球之間也有摩擦力,所以小球會不斷減速,直到靜止。程式運行起來也不錯,感覺很真實。為了達到更好的視覺效果我用小球的半徑直接作為小球的品質來使用,而不是半徑的平方。那樣的話可能大球被撞後速度改變不大。我把原始碼傳到CSDN下載中心了,【點擊這裡】進入下載頁面。這裡簡單談一下剛學的一個技術:雙緩衝。解決
Time of Update: 2018-12-05
題目描述:按逆時針順序給出簡單多邊形的n個頂點座標,判斷該多邊形是凸多邊形還是凹多邊形。分析:按照輸入順序依次將點串連起來對於連續的三個點p0,p1,p2,另向量a=p1-p0,b=p2-p1若是凸多邊形,那麼b相對於a一定是向逆時針方向旋轉的判斷兩向量的旋轉方向,可以使用向量的叉積 a×b = x1×y2 - x2×y1a×b > 0 b在a的逆時針方向a×b = 0 b平行於a(共線)a×b < 0
Time of Update: 2018-12-05
題目描述:又是FatMouse,它有M磅的貓食,貓看管著FatMouse最喜愛的食物JavaBean的倉庫,第i號倉庫裝有J[i]磅JavaBean,需要F[i]磅食物來交換。當然,可以不用全部交換,而只按照比例換取。問現在FatMouse最多可以換取多少JavaBean。分析:簡單的貪心。每次到單位貓食換取最多JavaBean的倉庫去換。將倉庫按照J[i]/F[i]降序排列,然後貪心地交換JavaBean即可。排序用C庫中地qsort。題目沒告訴倉庫數目,測了一下在500-1000個。但是詭異
Time of Update: 2018-12-05
題目大意:N*N的空間中有K個小行星,使用超級武器可以一次性清理一行或一列的所有小行星.但是超級武器很貴,給出星空圖,問最少需要使用多少次武器能清除所有的小行星.N<500,
Time of Update: 2018-12-05
題目描述:一個盜賊嵌入一間裝滿珠寶的倉庫,倉庫大小N×M (N,M<=10),每個格子都放著一顆鑽石,重量為Wij 。盜賊有一個背包,能裝V重量的物品,他希望能在L(L<=7)時間內取得盡量多的鑽石。不幸的是,某些格子被安裝上了監視器,監視器以Ti(1<=Ti<=6)的周期工作,若盜賊不幸被監視器發現,那麼他將被捕獲。盜賊和監視器從0時刻開始活動。分析:若拋開背包的重量限制,盜賊每個單位時間能有5種走法(4個方向和停留),最多走7步,最多的搜尋量也只有5^7≈80000。
Time of Update: 2018-12-05
題目描述:求一個數字序列的最長上升子序列的長度,序列長度不超過1000,數字範圍是0-10000 。分析:經典的動態規劃題目,據說這個題目n^2的DP也能過……寫了一個nlogn的DP,一直WA,不應該啊~ 後來發現輸入的數字最小是0,沒處理好……索性把輸入的數字全部加1,AC了~網上資料很多,不多寫了。特別要小心二分尋找,很容易出錯。#include <stdio.h>#define N 1002int g[N],maxlen;int Bsearch(int a){ int
Time of Update: 2018-12-05
題目大意:輸入兩個正整數x,y,判斷x和y能否由1到100之間的整數乘積組成,數字不能重複使用。分析:想不到很好的方法,一般考慮用搜尋來解決。最初的時候沒有考慮到資料範圍。稍加分析,x,y最大可以達到100!,大約160位,只能使用高精度運算。搜尋核心如下:void perform(bigNum x,int m) //對於大數x,用不大於m的整數去試除{ if(x等於1) { //成功, 標記變數 return; } for( p=m ; p>1 ; p-- ) //
Time of Update: 2018-12-05
去年某個時候總結的東西,這次做省賽題目時候就有一個“更相減損術”的題目,感覺這些細小的知識還是不能忽略,貼出來分享一下~輾轉相除法輾轉相除法,又稱歐幾裡德(Euclid)演算法,是歐幾裡德在約公元前300年提出的.用輾轉相除法求兩個數的最大公約數的步驟如下:先用小的一個數除大的一個數,得第一個餘數;再用第一個餘數除小的一個數,得第二個餘數;又用第二個餘數除第一個餘數,得第三個餘數;這樣逐次用後一個數去除前一個餘數,直到餘數是0為止。那麼,最後一個除數就是所求的最大公約數(如果最後的除數是1,那
Time of Update: 2018-12-05
題目描述:給出n個整數,對每個整數取正或取負求和,可得2^n個數。問這些數當中是否存在一個數能被k整除。n<=10000,k<=100分析:由於n特別大,直接按照題意求出2^n個數再判斷必然是不行的。此題可考慮用動態規劃。令e[i][j]表示前i個數求和的得數能否模k得到j,i從1開始。動態轉移方程e[i][j]=abs(p±a[i])%k,其中e[i-1][p]==1。若最後e[n][0]==1則有解,否則無解。這裡用到的原理是 (a+b)%m == (a%m+b%m)%m====
Time of Update: 2018-12-05
題目描述:古老的稱硬幣問題。現有一堆硬幣依次編號1-N(N<100),只有一個重量稍微不同。 接下來有K(K<100)次稱硬幣操作,給出每次稱量的結果,即a1,a2...am 大於等於或小於
Time of Update: 2018-12-05
題目描述:無向帶權圖中,邊數不超過100。從一個起點旅行到一個目的地,你所走的路線中費用最大的一條路可以免費,要求這次旅行的最小費用。分析:這是個變形的最短路徑題目。核心思想還是使用Dijkstra演算法。關於如何選擇免費的邊,我們可以枚舉:設起點和終點分別為sou,des。枚舉所有邊ei,其端點為xi,yi。斷開邊ei,計算ei兩個端點分別到起點終點的最短路徑之和。這裡有兩種情況,即xi到sou,yi到des;和xi到des,yi到sou,取兩者最小值。這樣得到以ei作為免費邊的最少費用。枚舉
Time of Update: 2018-12-05
題目描述:給出一個int範圍的整數x,求x=b^p的最大p值。分析:因為x在int範圍內,所以p的取值是1到31。枚舉一下,用pow函數對x開方,然後驗證即可。錯了好幾次……原因是資料可能是2^31,並且裡面有負數,但是題目明明說“The value of x will have magnitude at least 2 and be within the range of a (32-bit) int in C, C++, and
Time of Update: 2018-12-05
題目大意:給出n棵樹的座標,求最短用多長的繩子能把所有樹圍起來。(n<100)分析:典型的凸包問題。首先用Graham演算法求出點集的凸包,然後依次計算凸包上兩點間距離即可。貼代碼:/*ZJU1453 Surround the Trees*/#include <stdio.h>#include <stdlib.h>#include <math.h>#define N 105typedef struct{ int x,y;}Point;Point
Time of Update: 2018-12-05
題目描述:一個歌曲列表,你可以有3種操作:1,選擇上一首;2,選擇下一首;3,改變排序方式。改變排序方式後,當前選中的歌曲不變。初始時按照Title排序,也可在Author排序之間切換。問從指定某首歌開始,最少需要多少操作能選中指定的另一首歌。分析:又是一個AC人數很少的題~如果能想到是廣度優先搜尋就能做出來。還是考察基本功。沒什麼好寫的~ 發個文章紀念一下~:) 貼一下代碼,0.05s-------------------------------------------------------