Time of Update: 2018-12-07
UVA_111 這個題目並不困難,但是題意理解起來很蛋疼。 題目的意思是求兩個事件序列的最長公用子序列,而題目中輸入的是每個事件發生的時間,因而要先根據每個事件發生的時間把事件的序列的找到。 比如如果輸入是1 3 4 2,那麼實際上事件序列是1 4 2 3。#include<stdio.h>#include<string.h>#define MAXD 30int N, a[MAXD], b[MAXD], f[MAXD][MAXD];int init(){
Time of Update: 2018-12-07
UVA_10169 這個題目明顯可以預先處理出結果然後再隨用隨查。計算的公式並不難推導,在計算0的個數的時候採用一個X=10^(log10(X))這樣的轉化,這樣便只需計算出-log10(X)的整數部分即可。 此外,需要注意的是涉及整數乘法的地方一定要避免溢出,如果中間結果會超過int的範圍可以在計算之前根據需要強制轉型成double或者long long。#include<stdio.h>#include<string.h>#include<math.
Time of Update: 2018-12-07
/*轉化為數塔問題dp[i][j] i 表示第i秒 j表示第j個位置 能夠拿到的最大餡餅數狀態轉移方程dp[i][j] = max{dp[i+1][j-1],dp[i+1][j],dp[i+1][j+1]} + a[i][j];時刻注意邊界*/#include <stdio.h>#include <string.h>const int MAX = 100001; int dp[MAX][11]; //1 ~ 100000秒int max2(int
Time of Update: 2018-12-07
文章目錄 定義樸素的枚舉用歸併排序思想解決用支援區間修改的資料結構解決 定義對於一個包含N個非負整數的數組A[1..n],如果有i < j,且A[ i ]>A[ j ],則稱(A[ i] ,A[ j] )為數組A中的一個逆序對。例如,數組(3,1,4,5,2)的逆序對有(3,1),(3,2),(4,2),(5,2),共4個。
Time of Update: 2018-12-07
hdu 3577 也是這樣的題目典型的線段樹區間覆蓋,懶惰標記要多記錄兩個域,一個是區間內最大值所在的最左的位置,另一個是最右的位置View Code //zoj 3573#include<stdio.h>#include<cstring>#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define mid (l+r)>>1const int maxn = 100010;int sum[
Time of Update: 2018-12-07
建立一個簡單的表單,介面如下: “基礎應用”按鈕對應的代碼:/// 方法一: /// 修改 progressBar1.Value 來使進度條顯示發生變化 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void
Time of Update: 2018-12-07
Who's in the MiddleTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 3360 Accepted Submission(s): 1646Problem DescriptionFJ is surveying his herd to find the most average cow. He wants to know
Time of Update: 2018-12-07
UVA_108為了充分利用計算過的結果,我們可以先枚舉矩形左上頂點的位置,再枚舉矩形的大小。同時,在計算矩形的元素和時,也要充分利用子矩形的元素和。#include<stdio.h>#include<string.h>int a[110][110],b[110],c[110];int main(){int i,j,k,n,x,y,ans;while(scanf("%d",&n)==1)
Time of Update: 2018-12-07
UVA_10608 為了計數方便,我們在初始化並查集的數組p[]時全部初始化成-1,讓樹根的p[]值代表該集合內的人數。在合并時,令p[tx]+=p[ty]即相當將兩組的人數進行了相加,同時令p[ty]=tx即讓兩組資料同時指向了一個樹根。#include<stdio.h>#include<string.h>int N,M,p[30010];int find(int x){return p[x]<0?x:(p[x]=find(p[x])); }void
Time of Update: 2018-12-07
UVA_10723 首先這個題目肯定是按最長公用子序列的形式進行dp的,因為只有保證消去的一部分是最長公用子序列才能保證最後產生的序列最短。 因此,在記錄方案數的時候我們也按最長公用子序列的產生過程來記錄即可,我們不妨用p[i][j]記錄最長公用子序列的字元數,用f[i][j]表示到第一個字串第i個位置、第二個字串第j個位置時產生的序列最短的方案種數。 當a[i]!=b[j]時,p[i][j]=max{p[i-1][j],p[i][j-1]},那麼如果p[i][j]==p[i-
Time of Update: 2018-12-07
UVA_185 第一部分就不詳細說了,把字串翻譯成整數即可,關鍵在於第二部分,這個就像小的時候玩的填數位數學題。 首先,我們不妨分析一下題目的特徵,並試圖找盡量多的回溯的條件。 顯然我們應該從個位加和算起,這樣既符合我們的運算習慣,也方便我們對錶達式求值。我們不妨設對豎式的每一列的分析都是x+y+s=z的形式,其中s為前一位進上來的餘數,那麼我們當然選擇去枚舉x和y的值,這樣z就自然確定了,如果枚舉z的值話就顯得麻煩多了。
Time of Update: 2018-12-07
POJ_3368 本來想找個RMQ問題練一下今天剛學的ST演算法,結果這個題我用ST做不出來,所以只好又用回線段樹解法了。 當然dicuss裡面有人說也可用ST去做的,我就只說一下我用線段樹去做的思路吧。
Time of Update: 2018-12-07
URAL_1029 dp。#include<stdio.h>#include<string.h>#define MAXN 110#define MAXM 510int N, M, a[MAXN][MAXM], p[MAXN][MAXM];long long f[MAXN][MAXM];void init(){ int i, j; for(i = 1; i <= N; i ++) for(j = 1; j <= M; j ++)
Time of Update: 2018-12-07
POJ_3204 這個題目和ZOJ_2532是一樣的題目,具體的思路可以參考我的ZOJ_2532的解題報告:http://www.cnblogs.com/staginner/archive/2012/08/11/2633751.html。#include<stdio.h>#include<string.h>#include<algorithm>#define MAXD 510#define MAXM 10010#define INF
Time of Update: 2018-12-07
這幾天遇到一個Bug,這個Bug到現在還沒有完美的解決,不過對WPF有了不少瞭解。為了防止忘記已經瞭解到的東西,我將尋找到的所有知識和資訊的網頁都保留為開啟狀態。不能總是開幾十個網頁,所以臨時將有價值的資訊匯總,記成此文,稍後將進行整理。發現Google的時候中文找不到,一定記著用英文,英文往往能找到需要的資訊。 1.
Time of Update: 2018-12-07
#include <iostream>#include <string.h>#define MAX 1005using namespace std;char result[MAX];char a[MAX];char b[MAX];int result_size;void add();int main(){int n;while (cin >> n){cin >> result;if (n == 1){cout << result
Time of Update: 2018-12-07
View Code #include <cstdio> int left[250003], right[250003]; __int64 count; void merge(int a[], int l, int m, int r) { int i, j, k, n1, n2; n1 = m - l + 1; n2 = r - m; for (i = 0; i < n1; i++) left[i] = a[l+i]; for
Time of Update: 2018-12-07
一個小bug搞了半天,由於沒有離散化,線段樹的域的空間應該是4*maxn,maxn為x座標的最大值View Code #include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1const int maxn = 50000; //maxn 為 x 的最大值(
Time of Update: 2018-12-07
ActivationTime Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 520 Accepted Submission(s): 179Problem DescriptionAfter 4 years' waiting, the game "Chinese Paladin 5" finally comes out. Tomato
Time of Update: 2018-12-07
Probability OneTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 301 Accepted Submission(s): 224Problem DescriptionNumber guessing is a popular game between elementary-school kids. Teachers