codeforces 463C(對角線技巧)

2021-08-04 08:24:17 字數 1055 閱讀 1889

題意:選取兩個點,分別得到兩個點對應的對角線上的值,要求兩個點走的對角線不能相交,然後求兩個點的對角線的值最大。

思路:對於乙個n * n,求乙個點的左對角線和右對角線的技巧為:

對於a[i][j]這個點對應的左對角線上的橫座標+縱座標都等於i + j,右對角線 的i - j + n 都相等。

例如4 * 4 的:

i + j :為左對角線

i - j + n:右對角線

所以可用上面的下標統計左,右對角線元素的和,當統計乙個點對應的對角線上的元素之和的時候,用左對角線上的值+右對角線上 - a[i][j].

ps:對於n *m的也適用。

這個題是統計兩個點的對角線上的元素之和最大,並且不能相交,不能相交的話那麼他們的i + j 不能奇偶性不能相同。

注意:d1,d2陣列要開兩倍大,一直wa就是因為這個情況。

#includeusing namespace std;

#define inf 0x3f3f3f3f

#define clr(x,y) memset(x,y,sizeof(x))

typedef long long ll;

const int maxn = 2000 + 10;

int n;

ll a[maxn][maxn];

ll d1[maxn * 2],d2[maxn * 2];

int main()

}for(int i = 1; i <= n; i ++)

else

if(temp2 <= t)temp2 = t,x2 = i,y2 = j;}}

printf("%i64d\n%d %d %d %d\n",temp1 + temp2,x1,y1,x2,y2);

}return 0;

}

力扣 463 島嶼的周長 C

給定乙個包含 0 和 1 的二維網格地圖,其中 1 表示陸地 0 表示水域。網格中的格仔水平和垂直方向相連 對角線方向不相連 整個網格被水完全包圍,但其中恰好有乙個島嶼 或者說,乙個或多個表示陸地的格仔相連組成的島嶼 島嶼中沒有 湖 湖 指水域在島嶼內部且不和島嶼周圍的水相連 格仔是邊長為 1 的正...

Codeforces 587C 樹上倍增

題意 求樹上兩點路徑中的前 a 10 小的點權值。思路 類似lca倍增演算法來儲存 i 2 j 路上的 前 10 小個 的點權值。然後要寫乙個權值合併 具體求 u v 的話,就是先分別計算 和 減1是lca會重疊 然後再合併,輸出答案。include include include include ...

Codeforces 976C 題解報告

對資料進行排序 1 按左邊的數從小到大排 2 若左邊的數相等,則按右邊的數從大到小排。排序之後,若乙個數的右邊的數小於等於上乙個數的右邊的數,則這兩個數必然符合題意。比如2 13 2 12 1 11排序之後,變為 1 11 2 13 2 12因為12 13,則有 2,12 被包含在它的上乙個數 2,...