【第六屆山東省ACM競賽】B題 Lowest Unique Price(SDUT3252)
題目連結:Here
這一題是我今年省賽最大的遺憾啊。誒。。。想想就覺得傷心啊。這一題其實不難,但是比賽時,我已經想到了怎麼做,但是由於鄙人的失誤,結果導致我們隊後兩個小時的時間都耗在那裡了。越想越覺得可惜啊。我們現在看看這題的思路吧。
這一題,貌似大多人都是有STL的set做的。其實,這一題可以用線段樹做(不知道線段樹的童鞋請移步:這裡),而且還是簡單的單點更新問題。不知道單點更新的同學請移步:這裡。雖然我做線段樹的題目不是很多,但是我發現了一個規律。利用這個規律就可以更好的判斷,此題是否為線段樹的題目。
規律:題目中一般有插入刪除之類的操作,資料範圍一般在10的5次方到10的6次方左右,這樣的題目一般都可以用線段樹來解(純屬個人經驗,如有例外歡迎指出,不過我還沒見過不服從這個規律的線段樹的題目,當然這個僅供參考)。
現在我們言歸正傳。對於這一題我們應該怎麼用線段樹處理呢?我們利用結構體,定義兩個變數value, cnt。value用來儲存輸入的值(如果沒有輸入,那麼久給它一個很大的值),cnt用來記錄該節點的值被輸入的次數。如果輸入次數為1的話,那麼我們就讓 value 的值等於葉子節點的值。這樣題目就轉化為一個單點更新,區間最值問題了。具體操作,詳見程式碼。
這一題還有一個坑,不知道省賽是是不是這樣。就是每一組操作後,它多給了一個空格例如:“b 2 ”這樣。千萬要注意,不然就是萬年RE。
【程式碼如下】
(如有錯誤,歡迎指出,轉載請註明出處)//因為 log2(1000000)約為 20 //所以樹的深度為20 #include <stdio.h> #define MAXN 1<<20 #define Max 1e+6 #define INF 0xfffffff #define min(a,b) a<b?a:b struct ST{ int value, cnt; }node[2*MAXN]; int father[MAXN]; void build(int v, int left, int right){ node[v].value = INF; node[v].cnt = 0; if (left == right){ father[left] = v; return; } int mid = (left + right) / 2; build(2 * v, left, mid); build(2 * v + 1, mid + 1, right); return; } void Update(int ri){ if (ri == 1) return; int fa = ri / 2; int left = node[2 * fa].value; int right = node[2 * fa + 1].value; node[fa].value = min(left, right); Update(fa); } int main(){ char ch[5]; int T, n, num; scanf("%d", &T); while (T-- && scanf("%d", &n)){ build(1, 1, Max); while (n--){ scanf("%s", ch); if (ch[0] == 'q'){ if (node[1].value == INF) printf("none\n"); else printf("%d\n", node[1].value); } else{ scanf("%d", &num); if (ch[0] == 'b') node[father[num]].cnt++; else if (ch[0] == 'c') node[father[num]].cnt--; if (node[father[num]].cnt == 1) node[father[num]].value = num; else node[father[num]].value = INF; Update(father[num]); } } } return 0; }
相關推薦
【第六屆山東省ACM競賽】B題 Lowest Unique Price(SDUT3252)
題目連結:Here 這一題是我今年省賽最大的遺憾啊。誒。。。想想就覺得傷心啊。這一題其實不難,但是比賽時,我已經想到了怎麼做,但是由於鄙人的失誤,結果導致我們隊後兩個小時的時間都耗在那裡了。越想越覺得可惜啊。我們現在看看這題的思路吧。 這一題,貌
第六屆山東省ACM競賽 A題 Nias and Tug-of-War(java)
Nias and Tug-of-War Time Limit: 1000MS Memory limit: 65536K 題目描述 Nias is fond of tug-of-war. One day, he organized a tug-of-war
第八屆山東省ACM大學生程序設計競賽個人總結
我們 斐波那契 實現 結果 。。 學校 合數 工作 們的 因為省賽,從開學緊張到5月7號。心思也幾乎全放在ACM的訓練上。因為我還是校臺球協會的會長,所以臺協還有一些事情需要忙,但是我都給延遲了。老會長一直在催我辦校賽,但我一直說 等等吧,因為校賽只能在周六
【藍橋杯】第六屆國賽C語言B組 2.完美正方形(dfs)
spa else img IT bool break main LG fill 如果一些邊長互不相同的正方形,可以恰好拼出一個更大的正方形,則稱其為完美正方形。 歷史上,人們花了很久才找到了若幹完美正方形。比如:如下邊長的22個正方形2 3 4 6 7 8 12 13 14
【藍橋杯】第六屆國賽C語言B組 1.積分之迷(水題)
水題 urn class %d names 風鈴 需要 藍橋 std 小明開了個網上商店,賣風鈴。共有3個品牌:A,B,C。為了促銷,每件商品都會返固定的積分。 小明開業第一天收到了三筆訂單:第一筆:3個A + 7個B + 1個C,共返積分:315第二筆:4個A + 10個
【第六屆藍橋杯】格子中輸出
題目:格子中輸出 StringInGrid函式會在一個指定大小的格子中列印指定的字串。 要求字串在水平、垂直兩個方向上都居中。 如果字串太長,就截斷。 如果不能恰好居中,可以稍稍偏左或者偏上一點。 下面的程式實現這個邏輯,請填寫劃線部分缺少的程式碼。 #include &l
【第六屆藍橋杯】立方尾不變
題目:立方尾不變 有些數字的立方的末尾正好是該數字本身。 比如:1,4,5,6,9,24,25,.... 請你計算一下,在10000以內的數字中(指該數字,並非它立方後的數值),符合這個特徵的正整數一
河南省第六屆大學生程式設計競賽 :異 形 卵
題目描述 我們探索宇宙,是想了解浩瀚星空的奧妙,但我們卻很少意識到宇宙深處藏匿的危險,它們無時無刻不緊盯著我們的地球。如果外星人拜訪我們,結果可能與哥倫布當年踏足美洲大陸不會有什麼兩樣,這是歷史,也是現實。 在ZDM-777星球上發現的休眠異形卵,其外表與常見的卵不同,表面被一層石墨覆蓋
第七屆山東省ACM省賽 A Julyed
Julyed Time Limit: 2000MS Memory Limit: 65536KB Problem Description Julyed is preparing for her CET-6. She has N words to remember
hdu1212 Big Number &第六屆山東省賽Single Round Math (同餘定理,大數取模)
題目大意:每次輸入兩個數,第一個是高精度,第二個數小於100000;求 a mod b 根據同餘定理: (a+b)% c = (a%c+ b%c)%c (a*b)%c = ( a%c* b%c)%
湖南省第六屆大學生程式競賽--戰場的數目
題目I 戰場的數目 在上題中,假設戰場的圖形周長為p,一共有多少種可能的戰場? 例如,p<8時沒有符合要求的戰場,p=8時有2種戰場: p=10有9種戰場: 要求輸出方案總數模987654321的值。 輸入 輸入檔案最多包含25組測試資料,每個資料僅包含一
加法變乘法——第六屆藍橋杯C語言B組(省賽)第六題
clu 自己 nbsp 加法 藍橋杯 重新 () std spa 原創 加法變乘法 我們都知道:1+2+3+ ... + 49 = 1225現在要求你把其中兩個不相鄰的加號變成乘號,使得結果為2015 比如:1+2+3+...+10*11+12+...+27*28+29+
三羊獻瑞——第六屆藍橋杯C語言B組(省賽)第三題
lan font oid 漢字 print ack size IV cnblogs 原創 三羊獻瑞 觀察下面的加法算式: 祥 瑞 生 輝 + 三 羊 獻 瑞 ------------------- 三 羊 生 瑞 氣 (如果有對齊問題,可以參看【圖1.jp
第八屆山東ACM省賽F題-quadratic equation
圖片 註意 col sam num spa code pan follow 這個題困擾了我長達1年多,終於在今天下午用兩個小時理清楚啦 要註意的有以下幾點: 1.a=b=c=0時 因為x有無窮種答案,所以不對 2.註意精度問題 3.b^2-4ac<0時也算對 Prob
第六屆藍橋杯2015本科B組c/++部分解題報告
今天是2015年4月11日,昨天剛從hz趕回來,好久不寫程式碼,手感有些生疏,~~ 一、獎券數目(3分) 有些人很迷信數字,比如帶“4”的數字,認為和“死”諧音,就覺得不吉利。 雖然這些說法純屬無稽之談,但有時還要迎合大眾的需求。某抽獎活動的獎券號碼是5位數(10000-9
第六屆 藍橋杯 c/c++ B組 省賽 (3)——三羊獻瑞
三羊獻瑞觀察下面的加法算式: 祥 瑞 生 輝 + 三 羊 獻 瑞------------------- 三 羊 生 瑞 氣(如果有對齊問題,可以參看【圖1.jpg】)其中,相同的漢字
第六屆 藍橋杯 c/c++ B組 省賽 (7)——牌型種數
牌型種數小明被劫持到X賭城,被迫與其他3人玩牌。一副撲克牌(去掉大小王牌,共52張),均勻發給4個人,每個人13張。這時,小明腦子裡突然冒出一個問題:如果不考慮花色,只考慮點數,也不考慮自己得到的牌的先後順序,自己手裡能拿到的初始牌型組合一共有多少種呢?請填寫該整數,不要填寫
2015年4月第六屆藍橋杯c/c++B組省賽試題和個人解答
又一年的藍橋杯,好久沒那麼爽快的做題了,昨天上午剛考完藍橋杯,我把題帶出來了。不廢話,上題。 一、 獎券數目 有些人很迷信數字,比如帶“4”的數字,認為和“死”諧音,就覺得不吉利。 雖然這些說法純屬無稽之談,但有時還要迎合大眾的需求。某抽獎活動的獎券號碼是5位數(
2016年第七屆 藍橋杯 全國總決賽B題(完全平方數)
題目意思就是: 給你0,1,2,3,4,5,6,7,8,9十個數字,要你選出任意一個或幾個組合在一起成為完全平方數,每個數字都必須選且只能選一次,求可能的方案。 比如有其中幾種符合題意的情況: 0 16 25 73984 0 1 625 73984 0