Time of Update: 2018-12-03
來源:http://acm.hdu.edu.cn/showproblem.php?pid=4267題意:給一些數,有兩種操作,一種是在[a,b] 區間內,對(i - a)% k == 0 的加value,另一種操作是詢問某個位置的值。思路:很容易想到這是一個插線問點的問題,但是在更新值 的時候和平常的更新不同,這道題又增加了一個限制條件。因為k比較小(<=10),餘數的情況也很少,因此我們可以開55棵樹狀數組,用cnt[x][k][mod] 表示x 對k
Time of Update: 2018-12-03
來源:http://acm.hdu.edu.cn/showproblem.php?pid=4417題意:給一些數,數中有重複的。還有一些詢問,問的是[L,R] 區間內有多少個數小於h,有多次詢問。思路:普通方法的話肯定會逾時,題目問[L,R]區間內小於h的數有多少個,則可以算出cal(R) 和 cal(L - 1),
Time of Update: 2018-12-03
來源:http://poj.org/problem?id=1177題意:給出一些矩形,求出這些矩形所圍城的周長。思路:明顯是線段樹的題目啊,但是線段樹爛的一扯。。。具體來說,就是一條線段一條線段的來處理。先處理豎著的線段,再處理橫著的線段。處理線段長度的時候和掃描線求面積是一樣的。代碼:#include <iostream>#include <cstdio>#include <algorithm>#include <string.h>using
Time of Update: 2018-12-03
來源:http://poj.org/problem?id=2823題意:給一些數,每次可以看k個數。從左向右順序每次k個數,問每次的最大值 和最小值 是多少。思路:RMQ的問題,用線段樹鬆鬆水過。代碼:#include <iostream>#include <cstdio>#include <string.h>using namespace std;const int N = 1000010;struct tree{int
Time of Update: 2018-12-03
來源:http://acm.hdu.edu.cn/showproblem.php?pid=2227題意:給一個集合,問能求出多少個非降序的集合。思路:如果資料範圍小的話,可以用(n*n)的方法,即兩重迴圈的方法。因為n最大為100000,所以不行。用sum(i)表示到第i個數時有多少個非降集合,則sum(i) =sum( sum(j)),(num[j] < num[i]),觀察
Time of Update: 2018-12-03
來源:http://poj.org/problem?id=3277題意:給一些矩形,給出長和高,其中長是用區間的形式給出的,有些區間有重疊,最後求所有矩形的面積。思路:因為矩形的區間範圍太大,因此可以離散化,離散化後就是一個線段樹的問題了。結點資訊包括左端點,右端點,和高度。一般來說,線段樹建樹有兩種方法,一種是區間離散,一種是點離散,以前唯寫過點離散的,而這道題明顯 是區間離散更簡單。又學了一點新知識。代碼:#include <iostream>#include
Time of Update: 2018-12-03
來源:http://acm.hdu.edu.cn/showproblem.php?pid=3887題意:給一棵樹,樹的根結點給出,邊也給出,現在問每個結點下面有多少個結點的編號比該結點的編號小。思路:這道題就是POJ 3321 和 HDU 4417的結合。首先用dfs遍曆樹,對每個結點對應一個區間,然後就是求一個區間內比一個數小的數有多少個,和HDU 4417 一樣。不同的是這道題目dfs會爆棧,因此需要和棧類比dfs,或者調棧的大小。棧類比dfs代碼:#include
Time of Update: 2018-12-03
來源:http://poj.org/problem?id=1251題意:就是給出你圖,然後求最小產生樹的值即可。注意輸入。思路:完全裸的最小產生樹,kruskal水之。好久不寫最小產生樹,仔細想了想,還是寫了出來。代碼:#include <iostream>#include <cstdio>#include <algorithm>#include <string.h>#include <vector>using namespace
Time of Update: 2018-12-03
來源:http://poj.org/problem?id=1151題意:給一些矩形,求這些矩形的面積。思路:線段樹 + 掃描線的題目,因為資料 是double,所以要離散化。代碼:#include <iostream>#include <cstdio>#include <string.h>#include <algorithm>using namespace std;const int N = 110;struct line{double
Time of Update: 2018-12-03
來源:http://acm.hdu.edu.cn/showproblem.php?pid=3450題意:給一些數,問有多少集合,滿足相鄰的數之間的差的絕對值小於d。思路:樹狀數組,找出上界和下界後,和HDU 2227 一樣。找上界和下界的方法為二分。代碼:#include <iostream>#include <cstdio>#include <string.h>#include <algorithm>using namespace
Time of Update: 2018-12-03
來源:http://poj.org/problem?id=1389題意:給一些矩形,讓求這些矩形的面積。矩形是給出的左下角和右下角的座標,都是正整數。思路:簡單的線段樹題目,就是求矩形面積。因為都是整數,而且資料範圍不大,因此不需要離散化。代碼:#include <iostream>#include <cstdio>#include <algorithm>#include <string.h>using namespace std;const
Time of Update: 2018-12-03
來源:http://acm.hdu.edu.cn/showproblem.php?pid=3547題意:用n中顏色塗一個正方體的八個頂點,求有多少種方法。如果得到的結果大於等於10^15,則輸出後15位即可。思路:Ploya定理啊,是組合數學課本上的原題。對應於四種不同類型的旋轉,1:不動,即恒等旋轉有1個;2:繞三對對立面的中心旋轉,有旋轉90度,旋轉180度,旋轉270度,分別有3個;3:繞對邊終點連線旋轉,有6個;4:繞對角點旋轉,有旋轉120度和旋轉240度,分別有4個。因此共有24個對
Time of Update: 2018-12-03
來源:http://poj.org/problem?id=1823題意:有一些房間,對這些房間有三種操作,一是一段連續的房間住人,二是一段連續的房間變空,三是詢問這些房間中最長的一段連續的房間是多長。思路:明顯是線段樹的題目,中間用到了lazy思想,好題中的好題啊。挺難的一道題目,需要好好思考。這道題的關鍵之處在於,用lazy向下更新完之後,父結點的資訊還需要根據子結點的資訊來改變。也就是說,同時需要從下向上更新。代碼:#include <iostream>#include <
Time of Update: 2018-12-03
題意:有兩種類型的砝碼,每種的砝碼品質a和b給你,現在要求稱出品質為d的物品,要求a的數量x和b的數量y最小,以及x+y的值最小。思路:是擴充歐幾裡得的應用。設ax + by = 1,求出x和y的值,因為我們要求ax + by = n的解,所以需要將x y的值乘以n。因為題目中要求x和y的值都要為正,然而,易知,ax + by = 1在a和b都為正數的情況下,x 和 y必有一個數是負的。因此我們需要把x 和 y的值轉化為合法的正值。我們先把x轉化為正值,易知,把x轉化為正值的方式是 x =
Time of Update: 2018-12-03
來源:http://poj.org/problem?id=3737題意:給你一個圓錐,圓錐面積給出,問你圓錐的最大體積是多少。思路:枚舉底面圓半徑,算圓錐的體積。可以列出運算式,滿足三分,因此可以三分枚舉底面圓半徑。代碼:#include <iostream>#include <cmath>#include <string.h>#include <cstdio>using namespace std;const double pi = acos(-
Time of Update: 2018-12-03
來源:http://poj.org/problem?id=3278題意:給一個開始點和一個結束點,求從開始點到結束點需要多少步。可以左走一步,右走一步,或者座標乘2.思路:裸的bfs啊,水題一枚。代碼:#include <iostream>#include <cstdio>#include <queue>#include <string.h>using namespace std;#define CLR(arr,val)
Time of Update: 2018-12-03
好久沒有寫過最小產生樹的題了,碰到一道最小產生樹的題,沒想到竟然1A了,,,happy。用的是kruskal演算法,比較簡單的。題目:FrecklesTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 5046 Accepted: 2630DescriptionIn an episode of the Dick Van Dyke show, little Richie connects the freckles on
Time of Update: 2018-12-03
一道數論題,也是道簡單題,就是個擴充歐幾裡得,一直沒寫過擴充歐幾裡得的代碼,這次還是在朱神的協助下才寫出來的,不過高興的是1A了,,題目:Modular InverseTime Limit: 2 Seconds Memory Limit: 65536 KBThe modular modular multiplicative inverse of an integer a modulo m is an integer x such that a-1≡x (mod m).
Time of Update: 2018-12-03
來源:http://poj.org/problem?id=2828題意:有一些人在排隊買票,但是有些人會插隊。現在給出這些插隊的資訊,問最後人的順序。思路:一道線段樹的好題。我們從前向後考慮的話,當第i個人插隊的時候,他插隊到第posi個人的後面,也就是說,此時,他前面已經有了posi個人。因此,我們可以從後向前考慮,這樣,第i個人插隊到第posi個人的後面,說明了他的前方還有posi個空位置。因此,就可以用線段樹了,線段樹的結點儲存的是該區間有多少個空位置。ac代碼:#include <
Time of Update: 2018-12-03
來源:http://poj.org/problem?id=3370題意:n個小孩給m個鄰居要糖,要求是糖的總數是n的倍數,問應該向哪些鄰居要。思路:鴿巢原理的題,組合數學課本上的題目,上午剛寫了道基本上一模一樣的。。代碼:#include <iostream>#include <cstdio>#include <string.h>#define CLR(arr,val) memset(arr,val,sizeof(arr))typedef long long