七夕祭 模擬

2022-09-03 07:00:11 字數 3972 閱讀 9706

有乙個會場由

n' role="presentation" style="position: relative">nn排

m' role="presentation" style="position: relative">m

m列共計n×

m' role="presentation" style="position: relative">n×m

n×m個攤點組成。但是小

l' role="presentation" style="position: relative">l

l只對其中的一部分攤點感興趣。他預先聯絡了會場的負責人,希望能夠通過恰當地布置會場,使得各行中他感興趣的攤點數一樣多,並且各列中他感興趣的攤點數也一樣多。

但是攤點已經隨意布置完畢了,如果想滿足小

l' role="presentation" style="position: relative">l

l的要求,唯一的調整方式就是交換兩個相鄰的攤點。兩個攤點相鄰,當且僅當他們處在同一行或者同一列的相鄰位置上,每一行或每一列的第乙個位置和最後乙個位置也算作相鄰。現在小

l' role="presentation" style="position: relative">l

l想知道他的兩個要求最多能滿足多少個。在此前提下,至少需要交換多少次攤點。 in

put' role="presentation" style="position: relative">inp

utinput

2 3 4

1 32 1

2 22 3

ou

tput

' role="presentation" style="position: relative">out

puto

utpu

t

row 1
如果這道題只有一行,且一行的最後和第一不相連的話,就很容易想到 均分紙牌 。所以說,這道題其實就是均分紙牌的高階版。

但是這道題並不能貪心。畢竟o(

n2)' role="presentation" style="position: relative">o(n

2)o(

n2)還是吃不消的。

如果使用均分紙牌的方法,那麼就列舉從第

k' role="presentation" style="position: relative">k

k個位置開始,像均分紙牌的方法一樣依次向後推。最後取最小值。預計得分 70 分。

#include 

using

namespace

std;

int n,a[101],mid,sum,x;

int main()

mid/=n; //算平均值

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

}printf("%d\n",sum);

return

0;}

其實洛谷上還有另外一道題很像這道題。糖果傳遞,跟這道題就真的很像了。

可以利用字首和的思想,求出每一行的感興趣攤點的個數,將這些字首和排序,再求出中位數,按照|s

1−sk

|+|s

2−sk

|+|s

3−sk

|+……

+|sn

−sk|

' role="presentation" style="position: relative">|s1

−sk|

+|s2

−sk|

+|s3

−sk|

+……+

|sn−

sk||

s1−s

k|+|

s2−s

k|+|

s3−s

k|+…

…+|s

n−sk

|公式求出答案即可。

那麼為什麼選擇中位數就一定對呢?

我們把這個問題看成一條路上有

m' role="presentation" style="position: relative">m

m戶人家,要在這條路上打一口井,問選擇**打井可以使所有人家到達井的總路程最小?

不難發現,水井有無限個位置可以放,但是肯定是放

2' role="presentation" style="position: relative">2

2號人加到

4' role="presentation" style="position: relative">4

4號人家之間最優。那麼在那個點是在最優中最優呢?

無論水井放在

2' role="presentation" style="position: relative">2

2號人家和

4' role="presentation" style="position: relative">4

4號人家之間的那個點,

3' role="presentation" style="position: relative">3

3號人家外的所有點到達水井的距離都是不變的。那麼問題就轉化成了:水井放在**距離3號人家最近?

那這個問題就很明顯了:放在

3' role="presentation" style="position: relative">3

3號人家的門口肯定離

3' role="presentation" style="position: relative">3

3號人家最近嘛!

所以說,無論有3,

5,7...2x+

1' role="presentation" style="position: relative">3,5

,7...2x+

13,5

,7...2x+

1個人家,只要放在最中間(中位數)的人家就一定滿足最優。

那麼當人家為偶數個呢?

那麼,只要水井放在中間兩戶人家(

3' role="presentation" style="position: relative">3

3號人家和

4' role="presentation" style="position: relative">4

4號人家)之間,答案都最優。

所以,如果這道題選擇中位數,那麼一定能保證答案最優。

**:

#include 

#include

#include

using

namespace

std;

long

long h[100001],l[100001],x,y,n,m,k,sum,s1[100001],s2[100001],z1,z2;

void h() //計算行

void l() //計算列

int main()

if ((!(k%n))&&(!(k%m))) //both情況

else

if (!(k%n)) //row情況

else

if (!(k%m)) //column情況

else

return

printf("impossible")&0;

return

printf("%lld\n",sum)&0;

}

NOIP2013模擬 七夕祭

description 七夕節因牛郎織女的傳說而被扣上了 情人節 的帽子。於是tyvj今年舉辦了一次線下七夕祭。vani同學今年成功邀請到了cl同學陪他來共度七夕,於是他們決定去tyvj七夕祭遊玩。tyvj七夕祭和11區的夏祭的形式很像。矩形的祭典會場由n排m列共計n m個攤點組成。雖然攤點種類繁多...

NOIP2013模擬 七夕祭

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

NOIP2013模擬 七夕祭

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