此題是小奔的方案的改進。小奔的方案思路:倒推,每次都從小到大排序並且保證小號在前,然後使每乙個人分到的金幣都是上一次加一,直到金幣分完或者自己可以存活(投票率大於等於所需概率),如果不行就-1。 (即題目背景)
大奔的方案無非就是分兩種情況:1.只討好不是自己幫派的,那怕自己幫派成員都投反對票也能活下來。2.先討好是自己幫派的(此時夠了也要全部滿足),然後如果不夠就從小到大滿足其他人。在這兩種情況中選擇一種(保證小號拿得多),就是答案。
(即使是pascal,我也要排成c++的顏色
var
a,b,c,d,f,e:array[
1..1000
]of longint;
g:array[
1..1000,1.
.1000
]of boolean;
i,j,k1,k2,n,m,o,t,x,y,z:longint;
procedure zhx
(p,q:longint)
;var
i,j:longint;
s:real;
begin
i:=0
; s:
=(o/
100)
*(q-p+1)
;iftrunc
(s)<
>s then s:
=s+1
; j:
=trunc
(s);
for i:
=p to q do
if g[p,i] then begin dec
(j);
if p<
>i then begin e[i]
:=x; k2:
=k2+x; end; end;
if j<=
0 then exit;
i:=p;while j>0do
begin
inc(i);
if e[d[i]
]<
>
0 then continue
; k2:
=k2+b[i]+1
; e[d[i]]:
=b[i]+1
;if e[d[p+i-1]
]>m then e[d[p+i-1]
]:=m;dec
(j);
end;
end;
procedure zx
(p,q:longint)
;var
i,j:longint;
begin
i:=0
; j:=0
;while
(j/(q-p+1)
)<
(o/100)do
begin
inc(i);
if i+p-
1>q then begin k1:
=maxlongint; exit; end;
if g[p,i+p-
1] then continue
;inc
(j);
k1:=k1+b[p+i-1]
+1;if i=
1 then dec
(k1)
; a[d[p+i-1]
]:=b[p+i-1]
+1;if a[d[p+i-1]
]>m then a[d[p+i-1]
]:=m; end;
if(p+i-1)
=q then exit;
for j:
=p+i to q do a[d[j]]:
=0;end;
procedure qsort
(l,r:longint)
;var
i,j,mid,p,m1:longint;
begin
i:=l;j:
=r; mid:
=b[(l+r) div 2];
m1:=d[(l+r) div 2];
repeat
while
(b[i]
(b[i]
=mid)
and(d[i]
inc(i)
;while
(b[j]
>mid)or(
(b[j]
=mid)
and(d[j]
>m1))do
dec(j);if
(i<=j) then
begin
p:=b[i]
; b[i]
:=b[j]
; b[j]
:=p;
p:=d[i]
; d[i]
:=d[j]
; d[j]
:=p;
inc(i)
;dec
(j);
end;
until i>j;
if l(l,j)
;if i(i,r)
;end;
begin
readln
(n,m,o,t,x)
;fillchar
(f,sizeof
(f),0)
;fillchar
(g,sizeof
(g),
false);
for i:
=1 to t do
begin
readln
(y,z);if
(f[y]
<
>0)
and(f[z]
<
>
0) then
begin
for j:
=1 to n do
if f[j]
=f[z] then f[j]
:=f[y]
;continue
; end;
if(f[y]=0
)and
(f[z]=0
) then begin f[y]
:=y; f[z]
:=f[y]
; end
else begin f[y]
:=f[z]
+f[y]
; f[z]
:=f[y]
; end;
end;
for i:
=1 to n do
for j:
=1 to n do
if(f[j]
=f[i]
)and
((f[j]
<
>0)
or(i=j)
) then g[i,j]:=
true
;for i:
=n downto 1
do begin
c[i]
:=i;
b:=a;if i<
>n then for j:
=n downto i+
1do f[j]
:=a[j]
; d:
=c; k1:=0
; k2:=0
;if i<
>n then qsort
(i+1
,n);
fillchar
(a,sizeof
(a),0)
;fillchar
(e,sizeof
(e),0)
;if i<
>n then zx
(i,n)
;if i<
>n then zhx
(i,n)
; e[i]
:=m-k2;
a[i]
:=m-k1;
j:=i;while
(e[j]
=a[j]
)and
(jdoinc
(j);
if e[j]
>a[j] then a:
=e;if a[i]
<
0 then
begin
for j:
=n downto i+
1do a[j]
:=f[j]
; a[i]:=
-1; end;
end;
for i:
=1 to n do
write
(a[i]
,' ');
end.
比賽 小奔的方案 solution
有乙個著名的題目 五個海盜搶到了100個金幣,每一顆都一樣的大小和價值連城。他們決定這麼分 1 抽籤決定自己的號碼 1 2 3 4 5 2 首先,由1號提出分配方案,然後大家5人進行表決,當且僅當不少於半數的人同意時,按照他的提案進行分配,否則將被扔入大海喂鯊魚。3 如果1號死後,再由2號提出分配方...
比賽 小奔與不等四邊形solution
有這樣一道經典的數學題 已知乙個四邊形的邊長是四個連續的正整數,求證這個四邊形的面積的最大值不為整數。小奔輕鬆地證明了這個問題,現在問題來了,大奔要求小奔以最快的速度算出給定邊長的四邊形的最大面積,但小奔並不精於程式設計,你能幫幫他嗎?給出四個正整數a,b,c,d,表示四邊形的四邊長,求此四邊形的最...
PostgreSQL 大例項的備份方案之一
基於流複製的ha,取樣如下方案.本文介紹一下,在沒有其他主機的情況下,如何實施塊級別的增量備份.假設主機為了效能,未直接使用zfs作為檔案系統 主要用到的是chroot,zfs.當前,現在btrfs 也支援snapshot,所以隨便你的選擇了.實現方法也比較多,我們可以用容器,例如docker,也可...