電影票 紀中 3057 數學

2021-07-22 14:56:16 字數 3042 閱讀 4122

笨笨當了很久的道路排程員,笨笨也開始想體驗生活,從生活中發現數學問題,鍛鍊自己思維。最近《變形金剛3》,《哈利波特7》同步放映,明顯是決戰雌雄,已知王府井中一共有n人買了《變形金剛3》的票,m人買了《哈利波特7》的票,並且n>=m,並且電影院中現在只有兩種票,每次只有乙個人買,(共有n+m次),這n+m次組成乙個排列,為了保證每乙個人買票時,《變形金剛3》票房都不少於《哈利波特7》,(n個買《變形金剛3》的人之間沒區別,m個買《哈利波特7》的人也沒區別),笨笨想著到這樣的購票方案有多少種。笨笨想了好久都沒想出來,所以笨笨找到了你。

一行兩個數n,m ( 0<=m<=n<=5000)

輸出方案種數

假設將買《變形金剛3》票的人記為s,買《哈利波特7》的人記為x。

則n個買《變形金剛3》的與m個買《哈利波特7》的人的隊伍就可以用乙個具有n個s和m個x的字串,顯然這樣的字串共有c(n+m,n)個。

其中不滿足問題要求的串一定存在乙個最靠左的位置p,使得從第乙個字元到第p個字元為止的子串中x的個數比s的個數大1。

如sxsxx...就是乙個不滿足條件的串,其中p=5。

我們將從頭到p為止的子串中的字元s換成x則得到乙個具有n+1個s,m-1個x的串。

可以證明這種轉換是一一對應的,即任意乙個n+1個s,m-1個x的串都可以按照逆規則轉換成乙個不滿足題目條件的串.

轉換規則為在任意乙個n+1個s,m-1個x中找到最靠左的p,使得從頭到p的子串中s的個數比x個數大1,將到p為止的子串中的s與x互換則得到n個s和m個x的串.

且此串一定不能滿足條件,而具有n+1個s,m-1個x的串只有c(n+m,n+1)。

那麼ans=c(n+m,n)-c(n+m,n+1)

請用高精度做這題,要壓位。

const

maxn=1000;

var com1,com2:array[0..maxn] of longint;

a,ans:array[0..maxn] of longint;

f:array[1..10] of longint;

i,j,k:longint;

n,m:longint;

l:longint;

procedure

mul(b:longint);

var i,j,k:longint;

g:longint;

begin

g:=0;

for i:=maxn downto1do

begin

a[i]:=a[i]*b+g;

g:=a[i] div

10000;

a[i]:=a[i] mod

10000;

end;

end;

procedure

less;

var i,j,k:longint;

g:longint;

begin

g:=0;

for i:=maxn downto1do

begin

if com1[i]-g>=com2[i]

then

begin

ans[i]:=com1[i]-g-com2[i];

g:=0;

endelse

begin

ans[i]:=(com1[i]-g)+10000-com2[i];

g:=1;

end;

end;

end;

procedure

divi

(b:longint);

var i:longint;

s,g:longint;

begin

g:=0; s:=0;

for i:=1

to maxn do

begin

s:=g*10000+a[i];

a[i]:=s div b;

g:=s mod b;

end;

end;

begin

readln(m,n);

fillchar(com1,sizeof(com1),0);

fillchar(com2,sizeof(com2),0);

fillchar(a,sizeof(a),0);

fillchar(ans,sizeof(ans),0);

if n=0

then

begin

write(1);

halt;

end;

if n>m then

begin

write(0);

halt;

end;

j:=n+m;

a[maxn]:=1;

for i:=1

to n do

begin

mul(j);

divi(i);

j:=j-1;

end;

com1:=a;

fillchar(a,sizeof(a),0);

j:=n+m;

a[maxn]:=1;

for i:=1

to n-1

dobegin

mul(j);

divi(i);

j:=j-1;

end;

com2:=a;

less;

i:=1;

while ans[i]=0

do i:=i+1;

write(ans[i]);

for j:=i+1

to maxn do

begin

fillchar(f,sizeof(f),0);

k:=ans[j];

l:=4;

while k<>0

dobegin

f[l]:=k mod

10; k:=k div

10; l:=l-1;

end;

for k:=1to4

dowrite(f[k]);

end;

end.

電影票 紀中3057 組合數學

笨笨當了很久的道路排程員,笨笨也開始想體驗生活,從生活中發現數學問題,鍛鍊自己思維。最近 變形金剛3 哈利波特7 同步放映,明顯是決戰雌雄,已知王府井中一共有n人買了 變形金剛3 的票,m人買了 哈利波特7 的票,並且n m,並且電影院中現在只有兩種票,每次只有乙個人買,共有n m次 這n m次組成...

電影票房案例分析

import pandas as pd 載入資料 def read data file root dataframe pd.read csv file root print 資料的基本資訊 print dataframe.info print 資料的行是 i,列是 i dataframe.shape...

Python入門習題大全 電影票

有家電影院根據觀眾的年齡收取不同的票價 不到3歲的觀眾免費 3 12歲的觀眾為10美元 超過12歲的觀眾為15美元 請編寫乙個迴圈,在其中詢問使用者的年齡,並指出其票價。電影票 prompt please enter you age prompt nenter quit when you finis...