題目描述輸入
第一行包含三個整數n和m和t。t表示cl對多少個攤點感興趣。
接下來t行,每行兩個整數x, y,表示cl對處在第x行第y列的攤點感興趣。
輸出
首先輸出乙個字串。如果能滿足vani的全部兩個要求,輸出both;如果通過調整只能使得各行中cl感興趣的攤點數一樣多,輸出row;如果只能使各列中cl感興趣的攤點數一樣多,輸出column;如果均不能滿足,輸出impossible。
如果輸出的字串不是impossible, 接下來輸出最小交換次數,與字串之間用乙個空格隔開。
題面分析
假設滿足每行(列)攤點一樣多,那麼每行該有t/n(t/m)個點。那麼,我們可以由此將row/column/both/impossible判斷出來。設b[i]為第i行該多放多少個點才能到達平均,c[i]則為列。(負數我們也不慫他)很明顯,如果想均分紙牌,呵呵呵。(~那ac離開千里之外,他不再回來~)設 bi 的字首和為 si。如果從第k個位置開始,那麼第i堆和第i+1堆交換的紙牌數就是|si-sk|。總代價就是|s1-sk|+|s2-sk|+|s3-sk|+……+|sn-sk|。(絞盡腦汁冥思苦想ing)
(三年後)啊!!!當k為1~n的中位數時,該式有最小值。。。。。。
那麼我們就可以約掉其中一重迴圈,很好,我會給你乙個獎勵,那就是——ac(別想著gunpla之類的,不存在的)。
#include#include#include
#define fk 100001
using
namespace
std;
long
long
n,m,t,a,a1,ans,h[fk],l[fk],s[fk],s1[fk],b[fk],c[fk],k;
inti,j;
intmain()
for (i=1;i<=n;i++)
sort(s+1,s+n+1
);
for (i=1;i<=m;i++)
sort(s1+1,s1+m+1
);
if (t%n!=0 && t%m!=0
)
if (t%n==0 && t%m!=0
)
printf(
"%s%lld
","row
",ans);
}if (t%n!=0 && t%m==0
)
printf(
"%s%lld
","column
",ans);
}if (t%n==0 && t%m==0
)
k=(1+m)/2
;
for (i=1;i<=m;i++)
printf(
"%s%lld
","both
",ans);
}}
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感興趣的攤點數一樣...
七夕祭 模擬
有乙個會場由 n role presentation style position relative nn排 m role presentation style position relative m m列共計n m role presentation style position relative...