AcWing 105 七夕祭 貪心

2022-07-09 20:18:13 字數 1018 閱讀 7424

我們發現:

交換左右相鄰的攤點,只會改變某兩列的數量,同理,交換上下相鄰的攤點有改變某兩行的數量

於是我們就可以將行和列分開考慮

而對於行和列:就是經典的均分紙牌問題,不過這裡是環形均分紙牌

必然有一種最優解:有相鄰兩個位置不發生交換

假設有\(t\)張牌,\(n\)個人,

令 \(a[i] = \frac\),\(s[i]\)為字首和

從第\(k\)個人把環斷開,\(s[i]\) 的變化是都減掉 \(s[k]\)

所以答案即為:$$\sum_^\mid s[i] - s[k] \mid$$

這就是貨倉選址問題,把\(s\)排序,取中位數即為\(s[k]\)的最優解

#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

const int maxn = 100010;

int n, m, t;

int x[maxn] ,y[maxn], sum[maxn];

ll read() while(ch>='0' && ch<='9') return s*f; }

int main()

int flagx = 0, flagy = 0;ll ansx = 0, ansy = 0;

// 行

if(t % n != 0) flagx = 1;

if(!flagx)

memset(sum, 0, sizeof(sum));

// 列

if(t % m != 0) flagy = 1;

if(!flagy)

if(flagx && flagy) printf("impossible\n");

else if(!flagx && flagy)else if(flagx && !flagy)else

return 0;

}

七夕祭 模擬

有乙個會場由 n role presentation style position relative nn排 m role presentation style position relative m m列共計n m role presentation style position relative...

七夕祭(貪心 中位數)

傳送門 因為交換同一列的相鄰兩行,這一列的總數不變 交換同一行的相鄰兩列,這一行的總數不變。那麼如果可以平均分配的話,可以先將所有行都分配好,然後再將所有列分配好。這樣就變成了做兩次環形紙牌分配問題,給乙個數列,最後一位和第一位相鄰,問能否平均分配,最少需要傳遞多少次。首先考慮普通紙牌均分問題 有 ...

基本演算法 七夕祭

第一行包含三個整數n和m和t。t表示cl對多少個攤點感興趣。接下來t行,每行兩個整數x,y,表示cl對處在第x行第y列的攤點感興趣。首先輸出乙個字串。如果能滿足 vani 的全部兩個要求,輸出 both 如果通過調整 只能使得各行中 cl 感興趣的攤點數一樣多,輸出 row 如果只能使各列中 cl ...