s[i] 為 陣列a 前i個元素的和
s[i] = a[0]+ … + a[i]
s[i] = s[i-1] + a[i]
異或字首和:
s[i] 為 陣列a 前i個元素的異或和
s[i] = s[i-1] xor a[i]
p2004 領地選擇
題意理解:
有乙個n x m的地圖,地圖上的每乙個點都有乙個值,求占地c x c 正方形裡值的和最大
思路:用sum[a][b]來記錄 從[0][0]到[a][b]範圍內的值之和,即二維字首和。
邊讀邊存
sum[i][j] += sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+data;
當讀到的i,j >c 時。
開始判斷以(i,j)為右下角座標的c x c正方形的值和是不是最大的
即:summax = max(summax,sum[i][j] - sum[i-c][j] - sum[i][j-c] + sum[i-c][j-c]);
知識點如:求區間[a][b] —— [i][j]範圍內的值 (i>a && j>b)
= sum[i][j] - sum[a][j] - sum[i][b] + sum[a][b]
code:
#includeint sum[1009][1009];
int n,m,c;
int maxs=-1e9;
int maxi = 0;
int maxj = 0;
int main()
}} }
printf("%d %d\n",maxi,maxj);
return 0;
}
p3406 海底高鐵
題意理解:
對於一條路線,要經過m個城市(可能有重複的城市),城市只有i-1 i i+1 相鄰,對於相鄰倆個城市i和i+1之間的路段,設走過這條路有ni次,要麼付ci + ni * bi 要麼付ai * ni;
就是乙個選擇問題,首先得知道每個路段會經過多少次。但是如果對於2號城市到10000號城市,每次都用迴圈去累加次數,會次數過多。
這裡可以用到差分的思想。
對於l 到 r之間和
只需要記錄ton[l] 和 ton[r]就行
即:ton[l]++;
ton[r]–;
然後通過字首和再求得中間的值:
for i = l+1;i<=r;i++
ton[l] = ton[l-1] + ton[i];
用p[i]來記錄第i段路
code:
#includeconst int imax = 100009;
long long n,m;
long long p[imax];
long long a[imax],b[imax],c[imax];
int ton[imax];
long long ans = 0;
int main()
else
} }for(int i = 1;i0)
else
} }
printf("%lld",ans);
return 0;
}
p2671 求和
題意理解:
有m個顏色總數,n個格仔
求所有的倆元組(x,z)
(x+z) * (number_x +number_z)
的和思路:
分類討論,對於顏色為x,i為奇數的格仔
如果有n個,
那麼就有
假設1 3 5 7格仔的顏色相同
(1+3)*(number_1+number_3)+ (1+5) * (number_1+number_5) + (1+7) * (number_1+number_7)
(3+5) * (number_3+number_5) + (3+7) * (number_3+number_7)
(5+7) * (number_5+number_7)
從上面發現,我們可以把所有的項拆開來
可以發現
對於i*number_i
i*nui * (colorx-2)
對於i*number_j
i* sumx
再把i提出來
則對於i
i *(nui * (colorx-2) + sumx )
公式拆開發現並不是巧合,
則可以得到乙個可以利用字首和簡化運算的操作:
for(i=1;i<=7;i+=2)
code:
#includeint n,m;
int sum[100009][2];
int color[100009][2];
int c[100009];
int nu[100009];
int ans = 0;
int main()
for(int j = 1;j<=n;j++)
for(int i = 1;i<=n;i++)
printf("%d",ans);
return 0;
}
C const 指標和常量的三種情況
1.指向常量的指標 includeint main void 其中 name zhang 可以執行 name 0 a 報錯,因為 name是乙個指向xie這個字串常量的指標變數,所以不能改變name的值,但是可以改變指標所指向的位址 2.常指標 includeint main void 其中name...
mysql三種引擎 MySQL常見的三種儲存引擎
簡單來說,儲存引擎就是指表的型別以及表在計算機上的儲存方式。儲存引擎的概念是mysql的特點,oracle中沒有專門的儲存引擎的概念,oracle有oltp和olap模式的區分。不同的儲存引擎決定了mysql資料庫中的表可以用不同的方式來儲存。我們可以根據資料的特點來選擇不同的儲存引擎。在mysql...
mysql三種引擎 MySQL常見的三種儲存引擎
原文連線 簡單來講,儲存引擎就是指表的型別以及表在計算機上的儲存方式。資料庫 儲存引擎的概念是mysql的特色,oracle中沒有專門的儲存引擎的概念,oracle有oltp和olap模式的區分。不一樣的儲存引擎決定了mysql資料庫中的表能夠用不一樣的方式來儲存。咱們能夠根據資料的特色來選擇不一樣...