a序列劃分-codeforces1197c
將非遞減的序列劃分成k段,使最右減最左的和最小。
和這種序列差值有關的,用差分來寫,就轉化成和的問題。
b轉移矩陣-poj3070
就是個模板題
#include
#include
using
namespace std;
const
int max =10;
#define ll long long
class
matrix
void
init()
void
unit()
//初始化為單位矩陣
intresult()
const
friend matrix operator*(
const matrix&
,const matrix&);
intpow
(int);
private
: __int64 map[max]
[max]
;int row, col;};
matrix operator*(
const matrix& m1,
const matrix& m2)
return m;
}matrix m(2
,2);
int matrix::
pow(
int n)
return m.
result()
;}intmain()
return0;
}
c思維-codeforces797c
感覺思維題,就是貪心,或者由事件的終點來直接推斷結果。(個人的一點想法…)
所以這題就是乙個貪心,不難,但很容易寫錯…wa了乙個多小時q-q
d模擬-openj_bailian3709
就是個模擬,簽到題
#include
#include
#include
#include
using
namespace std;
#define ll long long
intmain()
while
(tt)
cout << ans <<
"\n";}
}
e最近公共車站-codeforces832d
樹上lca
三個點,兩兩求lca,值異或,求出三個點的匯點。(為什麼這樣能求匯點呢,畫圖看看就知道了)
g生日序列-hdu4027
線段樹,注意當數變為1的時候就不用更新了,因此維護乙個最大值的樹,是1的時候就不用向下更新。
和codeforces有題挺像的哈
#include
#include
#include
#include
#include
#include
using
namespace std;
#define ll long long
const
int maxn =
100005
;const
int n =
1<<63;
ll maxx[maxn <<2]
;ll sum[maxn <<2]
;void
pushup
(int rt)
void
build
(int l,
int r,
int rt)
int m =
(l + r)
>>1;
build
(l, m, rt <<1)
;build
(m +
1, r, rt <<1|
1);pushup
(rt);}
void
update
(int l,
int r,
int l,
int r,
int rt)
int m =
(l + r)
>>1;
if(l <= m)
update
(l, r, l, m, rt <<1)
;if(m < r)
update
(l, r, m +
1, r, rt <<1|
1);pushup
(rt);}
ll query
(int l,
int r,
int l,
int r,
int rt)
intmain()
update
(l, r,
1, n,1)
;}else
printf
("%lld\n"
,query
(l, r,
1, n,1)
);}}
printf
("\n");
}}
h超神學院-poj1703
種類並查集/帶權邊,我更習慣用帶權邊來寫。
#include
#include
#include
using
namespace std;
int pre[
100005];
int sum[
100005];
intfindleft
(int n)
void
link
(int i,
int j,
int s)
else
}int
main()
else}}
}}
i打表題-lightoj-2370
尤拉函式打表題。以前好像寫過。
不是打尤拉函式的表,應該也打不下,是打素數的表,因為要滿足尤拉函式值盡可能大,且數值盡可能小數,肯定就是素數(在素數an右邊an+1左邊的合數b,b的尤拉函式值小於等於an的尤拉函式值)
#include
#include
#include
using
namespace std;
#define ll long long
const
int maxn =
1e6+5;
int prime[maxn]
;void
init()
}}intmain()
}}printf
("case %d: %lld xukha\n"
, cnt++
, ans);}
}
j t-shirts codeforces1000a
就是模擬,沒了。
省隊集訓DAY2
假設我們列舉數列中長度為len的區間,那麼如何判斷兩個數列可以匹配呢?對於提取的數列從小到大排序,從大到小排序,然後兩兩配對,如果所有的都滿足 h 那麼就可以匹配。應該算是貪心吧。這樣做的時間複雜度是o n le n loglen 還是上面的思想,我們如何快速判斷呢?假設我們確定了提取出的區間數列,...
2017國慶鄭州集訓Day2
搜尋演算法是利用計算機的高效能來有目的的窮舉乙個問題解空間的部分或所有的可能情況,從而求出問題的解的一種方法。現階段一般有列舉演算法 深度優先搜尋 廣度優先搜尋 a 演算法 回溯演算法 蒙特卡洛樹搜尋 雜湊函式等演算法。在大規模實驗環境中,通常通過在搜尋前,根據條件降低搜尋規模 根據問題的約束條件進...
牛客國慶集訓派對Day2
題意 給出最大4096 64和64 4096的矩陣,其中有乙個矩陣只含有0和1,問你它們相乘所得到得矩陣所有元素異或 思路 一開始我想到的是能不能將01矩陣的一排都用二進位制表示,但是發現2的64次方大於4096,反而增大了複雜度,於是沒有做出這題,題解是將矩陣分塊,最多分成8塊,這樣01矩陣的種數...