Time of Update: 2018-12-03
題目:點擊開啟連結首先,這是一個遞推問題。mm結尾的只能由fm結尾的或者mm結尾的推來。以mf結尾的只能由mm結尾的推來,以fm結尾的只能由mf或者ff推來,以ff結尾的只能由mf推來。F(n)=F(n-1)+F(n-3)+F(n-4)。可是正常用大數的話會TLE。後來查閱DISCUSS得知應該使用矩陣乘法。其中1——4是已知的。其中這個A矩陣是要構建的,一般是通過0-1陣,達到的目的,構陣方式不唯一。構完陣後,將目標值-4,然後進行二分冪最佳化,再手動把前四加上,還是稍微有點暈的,畢竟數學略拙
Time of Update: 2018-12-03
人生當中第二次參加CODEFORCES,比起上次的水一發,這次變成了水兩發。。比賽連結:點擊開啟連結第一題大水。。。但仍然因為沒有注意getline()和getchar()的吃斷行符號問題掛了一次。HACK了一下別人也讓他掛了。。#include <iostream>#include <string>#include <cstdio>using namespace std;int main(){string tar;int
Time of Update: 2018-12-03
題目:點擊開啟連結這個問題是DP,但是不需要數組就可以做,應用startpos,endpos記錄位置。tmp讀數,now計算目前記錄的和,判當前+讀入的數是否小於讀入的數,如果越讀越小的話,那麼就換一個位置,如果增大,說明對MAX是有利的,移動endpos就可以了,最後和maxsum進行比較。附一組Trick資料:5 -1 -2 -3 -4 -5答案是 -1 1 1.#include <iostream>using namespace std;int main(){int
Time of Update: 2018-12-03
#include <iostream>#include <cstring>using namespace std;int dp[105][105];int max(int a,int b){if(a>b)return a;elsereturn b;}int main(){int testcase;cin>>testcase;while(testcase--){int
Time of Update: 2018-12-03
題目:點擊開啟連結水題一道,剛開始寫了一發類比,後來發現所謂的10^5是個length……果斷加了個大數枚舉,過了,今天換了個樣式重寫了個。易於推出,兩個數之間的最大差值為20.#include <iostream>#include <cmath>#include <iomanip>#include <fstream>#include <stdio.h>#include <string>using namespace
Time of Update: 2018-12-03
來源:點擊開啟連結水到炸的BFS,0為牆,1為路,2為起點,3為終點,4為炸彈重設(6秒鐘內要麼走出去要麼重設),走一步需要一秒,求走出去的最短時間~加一個簡單的炸彈時間判斷即可,開始wa1,因為visit標記只有重設點不能重複運行,而其他的地方都可以,所以visited的範圍要有所注意。#include <iostream>#include <cmath>#include <queue>#include <cstring>#include
Time of Update: 2018-12-03
我以前做過的KMP http://www.cnblogs.com/wuyiqi/tag/KMP/題意:從S串中拿出兩個子串能拼成T串的方案有多少種,兩個子串可以重複這道題其實要解決的問題就是求T串的某個首碼在S串中出現了幾次(cnt[])
Time of Update: 2018-12-03
連結 : http://acm.hdu.edu.cn/showproblem.php?pid=1890下傳翻轉標記的時候要特別注意每次將第i個數到第i大的數之間的數翻轉,然後刪除第i大的數/*區間翻轉,注意標記的下傳*/#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define L ch[x][0]#define R ch[x][1]#define KT
Time of Update: 2018-12-03
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4472圖片來自 : http://blog.csdn.net/woshi250hua/article/details/7824433題意:求將一個凸包切成若干個三角形的最小代價解法:上面的連結已經講的很詳細了,我就不多費口舌了#include <cstdio>#include <cstring>#include
Time of Update: 2018-12-03
連結 : http://www.lydsy.com/JudgeOnline/problem.php?id=1208找前驅 後繼 刪除一個節點直接將要刪除的節點旋轉到根,然後刪除根節點即可/************************************************************** Problem: 1208 User: wuyiqi Language: C++ Result: Accepted Time:216 ms
Time of Update: 2018-12-03
題目連結:點擊開啟連結配合上一篇部落格:矩陣乘法介紹的模板題。要求求解Tr(a^k)%9937,注意不要到最後才餘,在每處理完一次的時候就餘一下(矩陣性質:矩陣中的每個數同時除以/乘以相同整數,矩陣的性質均不變(包括矩陣的跡、矩陣的秩、矩陣的最簡階梯行列式等等)否則數字過大會溢出。#include <iostream>#include <cmath>#include <cstring>using namespace std;class Mat{public:
Time of Update: 2018-12-03
來源:點擊開啟連結三維BFS,比起二維BFS來說多了一維,但是也沒什麼難度。第一次卡時間過,在大神的指導下明白了,還可以進行最佳化。1、搜尋方向變成了6個。2、需要考慮到出口處為牆的情況。3、如果有這個會大大提高效率:if(a+b+c-3>tarstep) {printf("-1\n");continue;}(起點與終點間最短路徑大於時間限度)CODE:#include <iostream>#include <cstring>#include <cstdio&
Time of Update: 2018-12-03
zoj 3231給你一棵100個點的樹,每個點上有一些蘋果,然後現在讓你將一些點上的部分蘋果轉移到其他點上,使得最後所有點上的蘋果數量的方差最小,通俗的講,就是使得每個點上的蘋果的數量儘可能的平均,即任意兩個點的蘋果數量的差距不超過1,所以這裡有一個特點,點數只有100,即那些多1個蘋果的節點也不超過100,所以狀態就很好想了dp[i][j]表示i 子樹有
Time of Update: 2018-12-03
來源:點擊開啟連結看上去很簡單的一道題,可是。。真的很簡單嗎?找到定序,就找到了這個題目的關鍵..當然沒這麼簡單。。正常人的一反應是按從大到小排。。13 81 99 排完自然就是998113最大了。。發現WA。發現反例1:9 90 6,排完是9096,可正確的是9906。然後暴搜尋逾時之類的不提。按a+b,a等於b時如何如何的思路想,依然不對,因為都過不了這樣的範例。42 6
Time of Update: 2018-12-03
http://www.lydsy.com/JudgeOnline/problem.php?id=1588#include<cstdio>#include<cstdlib>const int mod =1000000;const int inf = ~0u>>2;#define KT (ch[ ch[rt][1] ][0])const int maxn = 200010;int ans;struct SplayTree { int sz[maxn];
Time of Update: 2018-12-03
題目:點擊開啟連結有一些人手中有100和50的錢,他們來買票,一張票50,電影院初始沒零錢可找,只能收若干50的顧客再找給100的,問有多少種合法的找錢方法。方法1:這個題目可以使用組合數學中的Catalan數性質,簡略說明一下CATALAN做法:合法的相片順序=所有相片順序-非法相片順序這裡非法相片順序的計算 就是:(- )*M!*N!然而在這題,因為每個人都是不同的,所以還要乘以 M!*N!所以得出最終方程:F(N)=(-)*M!*N! ;然後再化簡一下;F(N)=(M+N)! *
Time of Update: 2018-12-03
http://acm.hdu.edu.cn/showproblem.php?pid=3436離線操作,將兩個數之間那段數的個數也當做一個節點放在伸展樹中,找的時候根據節點的個數往左或往右找就好了/*關鍵是離散化的技巧其他沒什麼*/#include<cstdio>#include<cstdlib>#include<vector>#include<algorithm>using namespace std;const int inf =
Time of Update: 2018-12-03
囧rz...取的這都是什麼破題目啊...前幾日閑來無事,複習線代時對於計算表示鴨梨很大。於是果斷寫了一個計算行列式的小代碼。演算法是用遞迴實現的最暴力的行列式計算方法。 /*It's just a tool to calculate the matrix.Made by :Kymin.YuMail :kymin.yu@gmail.com*/#include<stdio.h>FILE *fin;FILE *fout;int ans=0;void print(int n,int
Time of Update: 2018-12-03
今天稍微學習了一下矩陣乘法和應用,我線代也不是很好。。。矩陣的定義和求解方法線上性代數中已經有所定義,我們在這裡採用不太嚴謹的定義,矩陣就是一個有行有列的數表,體現在電腦中就是二維數組。class Mat{public: int mat[15][15];};這個數表和那個數表可以相加,可以相乘,數表自身也可以求冪。單位陣定義:主對角線為1,其餘都是0的特殊矩陣,線代中用E表示。void initE(){for(int i=0;i<15;i++)E.mat[i][i]=1;}1、加法:
Time of Update: 2018-12-03
題目:點擊開啟連結沒什麼多說的,LCS問題盲打過,但我CE了兩次,因為把I和J搞混了。。另外注意LCS是中間可以有間隔的,KMP則沒有。另外別忘了前兩天部落格中曾經提到的二分法。#include <iostream>#include <cstring>#include <string>using namespace std;int max(int a,int b){return a>b?a:b;}int dp[3400][3400];int main()