比賽 大奔的方案solution

2022-04-06 03:08:23 字數 4255 閱讀 7927

此題是小奔的方案的改進。小奔的方案思路:倒推,每次都從小到大排序並且保證小號在前,然後使每乙個人分到的金幣都是上一次加一,直到金幣分完或者自己可以存活(投票率大於等於所需概率),如果不行就-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,也可...