Time of Update: 2018-12-04
分析問題並考慮已知的資料結構。細節處理很重要。#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <vector>using namespace std;//用標記數組的話果然不對 比如範例3 1 2 5 4,走一遍之後,再從頭開始進行遍曆的話,3+1,3-1都有標記,後面的都加了1//還有得注意到底是什麼情況下用sum(
Time of Update: 2018-12-04
題目連結:http://poj.org/problem?id=1035 #include <iostream>#include <cstdio>#include <cstring>#include <vector>#include <algorithm>using namespace std;struct vv{ char s[20]; int id;}v[10005];int cnt=0;int cmp(struct
Time of Update: 2018-12-04
看了好多資料,學會了dfs把樹轉化為區間進而用樹狀數組或線段樹做,然後再折磨了我幾天把區間修改和區間查詢和點查詢放在一起學會,今天試著寫了個,一交AC,啪啪!!!揚氣啊。。 現在逐條來寫一下我的收穫。1、dfs把樹轉成區間。 這個做法是參考網上大牛做法,自己在單步調試的過程中發現的問題。 每次建鏈表都是一個長鏈表,自己一開始以為只有一條鏈表,其實不然, 每個tree[i]都有自己的鏈表。 所以單步調試的時候,while(p) { }這個迴圈直接沒執行,正解。
Time of Update: 2018-12-04
一開始就明白那個N*1《k的演算法了,可無奈刪除操作耗時還是太多,最後學習了STL set,map相應的用法,方便好多。STL真的是一個好工具#include<iostream>#include<cstdio>#include<map>#include<set>#include<vector>#include<cstring>using namespace std;multiset<int>
Time of Update: 2018-12-04
Palindrome Sub-ArrayTime Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 162 Accepted Submission(s): 72Problem Description A palindrome sequence is a sequence which is as same as its reversed
Time of Update: 2018-12-04
題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=4415剛看見這個題目覺得很簡單(其實不是),直接可以把整個集合分成兩部分,一部分是有兵器的,一部分是沒有兵器的答案就是下面兩種情況下最優的那個第一種情況:只殺死所有沒有兵器的敵人第二種情況:有兵器的全部殺死,然後用得到的兵器和剩下的錢去殺沒有兵器的那個集合,因為有兵器的這個集合只要能殺死一個,那麼就全部都能殺死當然這個題目沒有那麼簡單,不能想當然的去直接用上面兩種情況去做,當然第一種情況沒什麼好說的,
Time of Update: 2018-12-04
題目連結:http://poj.org/problem?id=3277這個題目算是我真正意義上做的第一個離散化和線段樹結合的題目,做了很長時間,不斷打補丁最終才AC,從這個題目中我學到了很多1、離散化的思想2、線段樹的數組下標建樹方式(以前全部都是在數組上用指標建立樹)3、L>>1+1是先做1+1,也就是說L>>1+1 <==> L>>2
Time of Update: 2018-12-04
題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=1496這個題目要注意剪枝,也就是如果四個係數同號,那麼結果就一定是0,如過沒有這個剪枝,那麼很可能逾時方法一:hash,這個方法還是比較容易想的,因為a b c d的範圍和xi的範圍都不大,直接hash就肯定能搞定了,這個方法比較容易實現方法二:二分,題目中方程式可以轉換成 a b在一邊,c d在一邊,完成之後先處理c d,然後處理a b的時候直接在預先處理的c
Time of Update: 2018-12-04
題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=4622這個題目開始是用尾碼數組來做的,但是這個題目對尾碼數組時間卡的很緊,後來看解題報告說是用尾碼自動機搞定的,想想也是CLJ出題怎麼會沒有尾碼自動機呢其實這個題目字串長度不算長2000,但是查詢可以達到10000次,如果每次查詢都重建立立尾碼自動機來計算不同子串的個數的話會逾時,但是考慮到後綴自動機的構造過程的一個線上的,所以我們就考慮能不能先把要查詢的區間排序,然後按照左邊界排序,左邊界相同的按照
Time of Update: 2018-12-04
這個題目和平時的有點不一樣,平時的都是很普通的查詢,這次查詢的下標號會變,給線段樹造成一定的困擾,其實可以分區間來避免這個下標變化的問題根節點的值肯定是有子節點的值來確定了,那麼我麼就這樣,維護5個sum值,分別是除5餘數為1 2 3 4
Time of Update: 2018-12-04
題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=4268一般像這種題目,首先會想到動態規划算法但是這個題目一看資料就想到肯定是要找一個O(n)的或者O(n*logn)的一個演算法,所以動態規劃這種演算法比較難找,也很少見這種低複雜度的動態規划算法,所以就只能是貪心能提供這種複雜度了。把兩個人的牌揉到一起,做個標記是alice的還是bob的,然後按照長排序,長相等按照寬排序,都相等就alice在後bob在前面然後從前向後遍曆,如果是bob的,直接將bo
Time of Update: 2018-12-04
題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=4681很多人都說這題比較簡單,但是如果想不到方法還是不好做的,想到後基本上就等著AC了首先要會最長公用子系列的含義,這裡假設所有字元數組下標都是從1開始第一步求串a和串b的正向最長公用子系列
Time of Update: 2018-12-04
倍增法 例:給出n、x、p三個正整數,問(x^0+x^1+x^2+……+x^n) 對p模數的結果。資料規模:n、x、p<=10^9。等比數列求和公式? x^(n+1)-1 / x-1 ?我們能求出[x^(n+1)-1] % p的結果 但除以x-1如何解決?介紹兩種“拆”法: x^0+x^1+x^2+x^3+x^4+x^5+x^6+x^7=(1+x)(1+x^2)(1+x^4)要求:個數恰好為2的整數次冪 x^0+x^1+x^2+x^3+x^4+x^5=(x^0+x^1)+(x^2
Time of Update: 2018-12-04
題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=4404算是模板題吧,但是這個模板不好搞,也就是沒有積累這個模板通常沒有這個題目分兩種情況,在上升過程中爆炸,在下降過程中爆炸,求出圓心,然後直接套模板就好了!#include <iostream>#include <string.h>#include <algorithm>#include <stdio.h>#include
Time of Update: 2018-12-04
題目連結:http://poj.org/problem?id=1159這個題目算是一個簡單基礎的DP了,但是我還是想了一會dp方程dp[i][j]的意思是,下標從i到j的字串,如果變成迴文串最少要加多少個字元首先當i==j的時候肯定是0,因為一個字元肯定就是迴文,當i+1=j的時候,如果str[i]==str[j]那麼dp[i][j]=0否則dp[i][j]=1這兩個步驟完成之後開始如下dp,最後返回dp[0][n-1]就行了! if(str[j]==str[j+i])
Time of Update: 2018-12-04
題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=4686 只能說自己以前做的那個矩陣快速冪太弱了,或者推的還不夠。這道題把f(i),s(i),a(i),b(i)都合在一塊了,一個5*5的矩陣。另外,反正在hdu就用%I64d,別管別的了。 keng... 我的paw,multiply模板肯定沒錯,連續的WA是坑在__int64上。練習的題目太少,推敲涉及比較多的變數,贊一個#include <iostream>#include
Time of Update: 2018-12-04
看題解一開始還有地方不理解,果然是我的組合數學思維比較差然後理解了之後自己敲了一個果斷TLE。。。。我以後果然還得多練啊好巧妙的思路啊 知識1:費馬小定理是數論中的一個重要定理,其內容為:假如p是質數,且(a,p)=1,那麼 a^(p-1) ≡1(mod p)假如p是質數,且a,p互質,那麼 a的(p-1)次方除以p的餘數恒等於1對於除法模數還需要用到費馬小定理: a ^ (p - 1) % p = 1; -> a ^ (p - 2) % p = (1 / a) % p; 巧妙1:for(
Time of Update: 2018-12-04
格式為: cha^chb%ccha、chb均為字串/* * FZU1759.cpp * * Created on: 2011-10-11 * Author: bjfuwangzhu */#include<stdio.h>#include<string.h>#include<math.h>#include<stdlib.h>#define LL long long#define nnum 1000005#define nmax 31625
Time of Update: 2018-12-04
題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=4614 果然看了理解了一下大牛的代碼然後自己敲結果果然有不少錯誤回複說,線段樹做為一種資料結構,最好以一種風格過一題裸的然後作為自己的模板。。二分寫的也很噁心哪還有題目稍複雜一點的註定得推敲各種公式,不光DP注意邊界那樣令自己噁心,就是這些公式+1,-1結果都是差之千裡,或者自己根本調試不出來。思路很重要,模板也比較重要,線段樹裸敲的話容易出錯,比樹狀數組出錯幾率大的多。#include
Time of Update: 2018-12-04
poj 3468 樹狀數組解法update(c2, t+1, -d*(t+1)); 這一步真心沒看懂。看了一天結果還是沒有頭緒。是由這個公式推導而來的:sum[x] = org[1]+...+org[x] + delta[1]*x + delta[2]*(x-1) + delta[3]*(x-2)+...+delta[x]*1= org[1]+...+org[x] + segma(delta[i]*(x+1-i))= segma(org[i]) + (x+1)*segma(delta[i]) -