Time of Update: 2018-12-06
感覺樹狀數組要比線段樹優雅。。。反素數打表什麼的都搞好了,就是從當前位置推下一個位置的公式沒搞出來,後來看得別人的。。。if(p[now].x > 0) nxt = (nxt - 1 + p[now].x)%leave;else nxt = ((nxt + p[now].x)%leave + leave)%leave;然後在樹狀數組裡找第nxt大的數(二分)。。。View Code //#pragma comment(linker,"/STACK:327680000,327
Time of Update: 2018-12-06
POJ 1185 炮兵陣地 中文題,題意不再贅述。 解法:從題目可以知道,每一行的狀態只與前兩行有關。已知N < 100, M <= 10。很明顯的可以把M壓縮,把M中的每一個位置的狀態可以用0,1表示。所以M的總狀態可以用長度為M的二進位轉化成的十進位數表示。計算可以發現總的合法狀態並不多,因為要保證同一行的兩個士兵不能相互攻擊到。求合法狀態的關鍵代碼:REP(i, (1<<m)) { p = i; if(((p << 1
Time of Update: 2018-12-06
鄰接表實現圖的深度遍曆,糾結的問題啊。。。。。View Code #include <stdio.h>#include <malloc.h>#define MAX 100typedef struct arcnode/*表節點*/{int adjvex; /*鄰接點*/struct arcnode *nextarc;/*指向下一條弧的指標*/}arcnode;typedef struct vnode /*頭結點*/{int data; /*定點資訊*/
Time of Update: 2018-12-06
物理題,我把公式推錯了。。。 兩個限制條件,1、能爬上最高坡。2、Sweet Potato在每一個有Bitter Potatoes位置的速度大於等於Bitter 的速度。設要求的初速度為pv1、pv = sqrt(2*g*(maxh - h0));2、pv = tpv = sqrt(vi*vi + 2*g*hi); 為bitter potato縱座標。View Code #include <iostream>#include <cstring>#include &
Time of Update: 2018-12-06
最近兩次比賽出現兩道相同類型的題,有人十幾分鐘就AC了,而有人卡了倆小時。。。反思。。 先說hdu4353這道題,題意是要求一個從N個點1裡邊畫出一個多邊形來,然後給出M個點2。讓這個(多邊形的面積/多邊形內點2的個數)最小。 描述很複雜。。。但是仔細想想會發現,多邊形的點越多,面積也就越大,所以,這裡只能畫三個點,也就是一個三角形。至於怎麼求點2的個數,這是很有必要總結的,祭奠我那苦逼的倆小時吧。。。。先看一個圖: 這不是立體圖,僅僅是個平面圖。。。假設sum[i][j]表示i,j這條線上方
Time of Update: 2018-12-06
很早看過這個東西,不過今天遇到一道題發現居然沒有寫筆記。。。這裡補上吧。以下是我從某個題的解題報告翻出來的。轉載的別人的。。。。以此為例:對於N=8,K=3,8個元素序列1 3 -1 -3 5 3 6 7,視窗大小為3,也就是要求出(1, 3, -1), (3, -1, -3), (-1, -3, 5), (-3, 5, 3), (5, 3, 6), (3, 6, 7)這6個序列中的最小值,結果簡單,就是-1, -3, -3, -3, 3, 3. 使用單調隊列,首先要有一個資料結構struct
Time of Update: 2018-12-06
省賽結束了!第一次在我們學校舉辦,沒出什麼亂子,老師忙的也夠嗆。唯獨悲劇的是我們給老師的成績。。。!一個銀牌,兩個銅牌。我們隊因為有隊長在,拿到銀牌。雖然是銀牌第一,但終歸不是金。就像昨晚張老師說的:你們不好好做都對不起劉老師!其實這個成績,我們誰也沒能對得起,劉老師,張老師,還有很多關注ACM的老師。。。 整個比賽差不多前兩個小時解決掉四道題,然後就悲劇了。。。先是被山東誤導去做I,浪費掉40多分鐘後發現隊長發現很難寫。然後去搞J,悲劇的定積分,早忘乾淨了!最後搞F,還有半個小時左右吧。
Time of Update: 2018-12-06
當最短路變成二維,就會發生非常有意思的事情。。。問題:給出u v w,表示從u -> v(雙向邊)所耗的時間為w,又知道沒經過一條邊,獲利為1(對於一天邊可以來回走)。求從start到end點,獲利至少為k時用的最小時間。。。如果沒有那個k,這個問題直接就是st -> ed的最短路。spfa,dijkstra。。。等等現在可以設 dis[i][j]表示到從st到 i點經過邊數為j 時的最短路。然後直接spfa,隊列中的每個點保留兩個值,節點號,和到這個節點的邊數。const
Time of Update: 2018-12-06
優先隊列,據說標程是並查集,沒思路。貌似優先隊列都是直接用stl寫的,又逼我用stl了。prioriry_queue不熟。ps: value值越小,優先順序越高。所以重載 < 運算子時按優先順序從大到小排序bool operator < (const node a, const node b) {if(a.day != b.day) return a.day > b.day;return a.type > b.type;} 參考網上的代碼View Code
Time of Update: 2018-12-06
確定比賽名次Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 3389 Accepted Submission(s): 1213Problem
Time of Update: 2018-12-06
無意間看到hh大牛的這篇部落格:http://www.cppblog.com/notonlysuccess/archive/2011/09/26/80162.html#156835“去年10月16號,A了第一道A+B,我的AC生涯也正是開始了今天是4月16號,正好半年,提交了三道水題。。。在HDU的AC量達到了900。。。” 這得如何瘋狂的刷題才能做到這樣。回頭想想自己,為了能1Y一道水題而沾沾自喜!做完一道題就不自覺的想著休息一會,我又有什麼資本休息?比別人多的題多還是比別人掌握的好。就
Time of Update: 2018-12-06
最佳化剪枝和可行性剪枝poj1699搜尋的技巧和最佳化poj3411, poj1724記憶化搜尋poj3373,poj1691 最佳化剪枝和可行性剪枝POJ 1699對這題無語了,爆搞TLE,加一個怎麼也沒想到的減枝47MS...規模並不大,可以直接dfs,需要預先處理一下,add[i][j]表示第j號串加在第i號串上增加的長度。。。這個計算的時候要注意。本菜就錯在這上邊wa了一上午!。 搜尋的技巧和最佳化 poj
Time of Update: 2018-12-06
第一感覺就是差距太大了。6題, 7題,甚至AK。。。Orz各路大神! A,簡單題。就是類比那個過程。還是編碼能力不行,過的很慢。 B,這個gbx跟我說了下題意,然後用暴力方法試了一下,TLE。後來想到記錄連續出現0最多的點的位置,從這個位置種開始調整序列。 C,排序,我直接sort的,很慢。後來bbm說可以用vector。
Time of Update: 2018-12-06
250pt水題 500pt 分兩種情況, 1、RGB中最小值足夠大,制約因素是R+G+B的值,這種情況下結果為(R+G+B)/tot 2、R+G+B足夠大,制約因素是RGB中最小值不夠大,這種情況下結果為m/c 兩者取最小值第一種情況,R=7,G=6,B=6,最小值6足夠畫兩個三角形,但是R+G+B=19不夠畫兩個三角形 第二種情況R=1000000000,G=6,B=6,R+G+B足夠畫N多三角形,但是G、B只有6個,最多畫兩個三角形 /*就他妹的6行代碼!!!*/class
Time of Update: 2018-12-06
好噁心的題。。。。。證明可以證出來。。。。歐拉函數:φ(n) = n(1 - 1/p1)(1 - 1/p2)(1 - 1/p3)....n/φ(n) = (p1/(p1 - 1)) (p2/(p2 - 1)) ....要使n/φ(n)最大,因為p/(p - 1)隨p的增大而減小,所以p應該儘可能的小,p/(p - 1) > 1所以p儘可能的多。。。也就是說從最小的素數開始往後連乘枚舉,找到比n小且離n最近的數。。。。 不得不吐嘈的是,=,
Time of Update: 2018-12-06
El DoradoTime Limit: 1000MS Memory limit: 65536K題目描述Bruce Force has gone to Las Vegas, the El Dorado for gamblers. He is interested especially in one betting game, where a machine forms a sequence of n numbers by drawing random numbers. Each
Time of Update: 2018-12-06
兩個典型的例題:POJ 1753, POJ 2965;POJ 1753 狀態轉移:1 int Flip(int pos, int i) {2 pos ^= (1<<i);3 if(i+4 < 16) pos ^= (1<<(i+4));4 if(i-4 >= 0) pos ^= (1<<(i-4));5 if(i%4+1<4) pos ^= (1<<(i+1));6
Time of Update: 2018-12-06
注意將後一個數插到前一個數上,然後用隊列每次儲存入度為0的數,累加同一工資層級的人的工資View Code #include <stdio.h>#include <stdlib.h>#include <string.h>#define N 10005typedef struct node //鄰接表節點{int adj; //節點值 struct node * next;}node;struct //頂點{int
Time of Update: 2018-12-06
/*題意:傳說中的Ural神校要搞80周年校慶。學校的員工關係構成一顆樹,每個員工有個pleasure值,表示參加party的開心程度。每個員工都不想跟自己的頂頭上司一起參加party。然後校長就想啦,怎麼發請柬才能讓party最high。 思路:定義fw[i]表示帶上根結點時這顆子樹的最大pleasure,fn[i]表示不帶根結點時這顆子樹的最大pleasure。轉移方程就是:fw[i] = sum(fn[son[i]]);fn[i] = sum( max(fn[son[i]], fw[
Time of Update: 2018-12-06
結構體能自由組裝資料,是一種很常見的資料打包方法。當我們定義一個結構體後,沒有初始化就使用,就會使用到垃圾資料,而且這種錯誤很難發現。對於定義的任何變數,我們最好都先初始化。 除了使用memset和ZeroMemory之外,有沒有更簡單的方法初始化呢?因為有時候每定義一個結構體,就使用一次memset,也會覺得很繁瑣。 我這裡總結三種方法,如果大家有什麼好的方法,不妨加上去。 1、結構體的建構函式中初始化。 2、繼承模板類初始化 3、定義時初始化在C++中,結構體與類在使用上已沒有本質上的區別了