Time of Update: 2018-12-03
每一條路只能走一次,求一條起點到終點再到起點最短的路。那麼給每一條路賦值容量為1,費用是距離,從起點開始用最小費用流增廣2次後的費用就是最小費用。這題就是最小費用最大流。 Farm TourTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 7904 Accepted: 2837DescriptionWhen FJ's friends visit him on the farm, he likes to show them
Time of Update: 2018-12-03
這次又漲姿勢了。。。。矩陣的冪能夠用來求斐波那契數列。具體的方法就在下面的題目裡面。因為矩陣冪能夠用分治法來求,所以能夠節省不少時間,另外由於就取最後四位,那麼直接對結果模數10000,至於為什麼在運算中模數不影響最後的結果這涉及到同餘的知識。請參見Matrix67大牛的這篇部落格http://www.matrix67.com/blog/archives/236FibonacciTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 7
Time of Update: 2018-12-03
Tr ATime Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1695 Accepted Submission(s): 1253Problem DescriptionA為一個方陣,則Tr A表示A的跡(就是主對角線上各項的和),現要求Tr(A^k)%9973。 Input資料的第一行是一個T,表示有T組資料。每組資料的第一行有n(2
Time of Update: 2018-12-03
這道題目在黑皮書上有。思路很容易就想到,就是枚舉每兩個端點,判斷兩個點之間是否與牆相交,不想交的話則將路徑距離加入矩陣中,相交的的話則賦值INF,然後就是一個求最短路徑的問題,可以用dijkstra演算法。這道題麻煩在建圖。The DoorsTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 4176 Accepted: 1742DescriptionYou are to find the length of the
Time of Update: 2018-12-03
這是一道細節題。題目中讓我們用兩條線段接雨水,雨水是垂直落下的,問我們用給定的兩條線段能接到多少水。這裡用很多種情況都要一一討論。1:兩條線段不想交的時候接不到雨水2:兩條線段重合的時候接不到雨水3:兩條線段的交點與期中一條線段的最高點相同時,無法接到雨水4:有一條線段水平時接不到雨水。5:當兩條線段的最高點均在交點一側時,期中較高的點遮住了較低的點時,無法接住雨水。 註:最後計算面積的時候取點十分重要。我程式中有注釋。在這個地方我貢獻了5,6次才發現。之前把各種接不到的情況考慮後,卻不小心改掉
Time of Update: 2018-12-03
算出每一個到每一個房子的距離後建圖。源點與人連,容量1,費用0人與每個房子都要連,容量1,費用為距離每個房子與匯點連,容量1,費用0求一次最小費用即可另外此題資料的範圍開大點。Going HomeTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 14013 Accepted: 7175DescriptionOn a grid map there are n little men and n houses. In each
Time of Update: 2018-12-03
此題一開始想錯了演算法,直接將k個物品放在一個網路中求了一次最小費用。直接TLE。。。。後來看了DISCUSS發現對於每一種物品分開求最小費用最大流。這樣就降低了點的數量。每次費用流最壞的情況就是102個點,而之前一次求的話點最壞可能到5000,邊的數量更加恐怖。。。。。。建圖。對於第k種物品1:第i個商店和源點連,容量為相應物品的需求,費用為02:第i個倉庫和匯點連,容量為相應的物品庫存,費用為03:每一個商店和每一個倉庫分別連線,容量INF,費用為相應的耗費。這裡注意。對於每種商品如果供小於
Time of Update: 2018-12-03
warm up的第六題,當時就看出來是線段樹了,只是因為一些細節問題,沒有A掉,做題目的時候心浮氣躁。看來要走的路還很長。這題目有三種動作讓我們選擇 1:順時針移動一格 2:逆時針移動一格 3:把第一個球丟掉。問我們最少多少個動作把球從小到大丟掉。這題的資料量很大,我想到了查詢從當前要丟掉的球的位置順時針到第一個球和逆時針到第一個球所在的位置上還剩餘多少個球,來求出最少的動作。(這裡的第一個球是上一次動作丟掉的球的位置,類比的時候要注意這裡的細節,要仔細,每次丟掉一個球順時針位置的下一個球補上,
Time of Update: 2018-12-03
有關單調隊列的實現詳見這個部落格,寫的不錯http://xuyemin520.is-programmer.com/posts/25964Sliding WindowTime Limit: 12000MS Memory Limit: 65536KTotal Submissions: 26980 Accepted: 8031Case Time Limit: 5000MSDescriptionAn array of size n ≤ 106 is given to you. There is a
Time of Update: 2018-12-03
這道題目是第三種矩陣乘法的應用。然我們求S = A + A2 +A3 + … +Ak.的結果矩陣M67大牛的部落格上面講的是一種分治的方法。設f[n]=A^1+A^2+....A^n;當n是偶數,f[n]=f[n/2]+f[n/2]*A^(n/2);但n是奇數,f[n]=f[n-1]+A^(n);而看了DISCUSS之後發現一種編程複雜度更加小的方法。再次漲了姿勢。。Let B=[ [A I]; [0 I] ]B^(k+1) = [ [A^k
Time of Update: 2018-12-03
因為If x < 10 f(x) = x.If x >= 10 f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + …… + a9 * f(x-10);所以根據遞推式構造關係構造遞推矩陣,與vijos1067的本質一樣,注意上方的ai與f(i)是反的,這裡我已開始沒注意查了一會。A Simple Math ProblemTime Limit: 3000/1000 MS (Java/Others) Memory Limit: 3276
Time of Update: 2018-12-03
//g(i)=k*i+b//f(i): fibonacci number//s(n)=f(g(0))+f(g(1))+...+f(g(n));//[ f(n+1) f(n) ] = [ 1 1 ] ^n//[ f(n) f(n-1) ] [ 1 0 ]//s(n)=sum(A^(k*i+b)) (0<=i<n)//s(n)=A^b*(sum((A^k)^i)) (0<=i<n)//B=[ [A I];// [0 I] ]//B^(k+
Time of Update: 2018-12-03
->題目請戳這裡<-->中文題目請戳這裡<-題目大意:n個房間編號1-n,現在有2個操作:操作1,給一個數d,表示要預定d間連續的房間,如果沒有輸出0,如果有,輸出最小的起始房間號。操作2,給一個區間a,b,表示編號a到b的房間清房。題目分析:線段樹經典模型。這題並不難,不過要想清楚。我曾以為自己想清楚了,結果WA了一早上。。。主要思路:線上段樹每個節點維護3個變數:maxlen表示當前區間最大連續空房間數,l表示當前區間左連續房間數,r表示當前區間右連續空房間數。更新的
Time of Update: 2018-12-03
//題目參數 n,x,y//f(n)=x*f(n-1)+y*f(n-2)//s(n)=sum(f(i)^2) 0<=i<=n//分解得到//f(n)^2=(x^2*f(n-1)^2+y^2*f(n-2)^2+2xy*f(n-1)*f(n-2));//s(n)=s(n-1)+f(n)^2;////因為要求sn 我們構造矩陣[s(n-1),f(n)^2,f(n-1)^2,f(n)*f(n-1)]//觀察如何能夠得到矩陣[s(n),f(n+1)^2,f(n)^2,f(n+1)*f(n)
Time of Update: 2018-12-03
/*題目大意:順次給出m個置換,反覆使用這m個置換對初始序列進行操作,問k次置換後的序列。m<=10, k<2^31。首先將這m個置換“合并”起來(算出這m個置換的乘積),然後接下來我們需要執行這個置換k/m次(取整,若有餘數則剩下幾步類比即可)。注意任意一個置換都可以表示成矩陣的形式。例如,將1 2 3 4置換為3 1 2 4,相當於下面的矩陣乘法:[ [ 0 0 1 0] [1] [3] [ 1 0 0 0] [2] = [1
Time of Update: 2018-12-03
之前數值計算學過,可是好久不複習給忘記了。於是拿出出來複習。終於搞定。題目意思很明顯給你一個方程組 讓你求(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11)但是方程組的形式是一個二次方程組(ai1-x1)^2 + (ai2-x2)^2 +(ai3-x1)^2 + (ai4-x2)^2 +(ai5-x1)^2 + (ai6-x2)^2 +(ai7-x1)^2 + (ai8-x2)^2 + (ai9-x2)^2 +(ai10-x1)^2 + (ai11-x2)^2 =
Time of Update: 2018-12-03
此題不能直接用費用流,會TLE,因為只要輸出比方案好的解即可,所以進行一次消圈就可以了Evacuation PlanTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 2401 Accepted: 616 Special JudgeDescriptionThe City has a number of municipal buildings and a number of fallout shelters that were
Time of Update: 2018-12-03
很水的一道題,每一次移動只能向兩邊移動一格,給出了起點,和終點求一共有多少種移動方案。狀態方程是 :f(i,j)=f(i-1,j-1)+f(i-1,j+1); 表示第i秒到第j棵樹的移動方案總數 WormTime Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1785 Accepted Submission(s):
Time of Update: 2018-12-03
矩陣乘法的第四類問題。與vijos1049做法一樣。只是這次,他把結果給了你讓你求一個原始數列。具體做法就是把變換規則取反,然後還和原來一樣矩陣求冪,然後與原始序列相乘,在最後輸出答案就可以了。比方說我的變換規則是 2 3 1 5 4那麼原本的變換操作是[ [ 0 1 0 0 0 ] [ 0 0 1 0 0 ] [ 1 0 0 0 0 ] [ 0 0 0 0 1 ] [ 0 0 0 1 0 ] ]所以逆操作是 [ [ 0 0 1 0 0 ] [ 1 0 0 0 0 ] [ 0 1
Time of Update: 2018-12-03
/*我們可以用上面的方法二分求出任何一個線性遞推式的第n項,其對應矩陣的構造方法為:在右上方的(n-1)*(n-1)的小矩陣中的主對角線上填1,矩陣第n行填對應的係數,其它地方都填0。例如,我們可以用下面的矩陣乘法來二分計算f(n) = 4f(n-1) - 3f(n-2) + 2f(n-4)的第k項:[ [ 0 1 0 0] [f(k-4)] [f(k-3)] [ 0 0 1 0] * [f(k-3)] = [f(k-2)] [ 0