兔子跳躍之謎下

2021-08-01 07:53:03 字數 2302 閱讀 3990

bzoj許可權題,但這個**可免費評測

題目描述

小生和小森在玩兔子之謎遊戲。有三隻兔子排成一排。知道每只兔子的初始位置,以及三個兔窩的位置。

遊戲的規則是,重複以下步驟k次:選擇兩個不同的兔子a和b,分別位於a和b。a可以跳過b到達2*b-a的點:

跳躍是不允許其他小兔子已經在點2*b-a的位置上:

跳躍也不允許一次跳過乙個以上的兔子:

現在小生和小森想要知道,k次操作之後,能否讓所有兔子都分別跳到乙個兔窩裡面。注意,第i個兔子並不一定要在第i個巢。並且輸出跳法的種數,數值可能很大,要對結果取模1000000007。只要有乙個跳躍是不同的,兩種方式被認為是不同的。

輸入 有多組測試資料:

第一行,包含乙個整數num,表示測試資料的個數。(1<=num<=10)

每組測試資料,

第一行三個整數,第二行三個整數,分別表示兔子的初始位置和兔窩的位置。兩組數值都是嚴格遞增給出。範圍均為[-10^18,10^18]。

最後乙個整數k。[1,100]。

輸出 共num行,

跳躍的種數。

樣例輸入

8 0 5 8

0 8 11

1 0 5 8

0 8 11

3 0 5 8

0 8 11

2 5 8 58

13 22 64

58 0 1 2

1 2 3

100

5 8 58

20 26 61

58 67 281 2348

235 1394 3293

83 -1000000000000000000 999999999999999998 999999999999999999

-1000000000000000000 999999999999999999 1000000000000000000

5 樣例輸出

1 5

0 0

0 537851168

167142023

29 提示

此題只有三隻兔子

可發現規律:向裡跳只有一種可能,向外跳有兩種可能

由此想到了樹,(初始狀態)為樹上乙個節點,要走到(終止狀態)的方案總數

lca=(初始狀態)與(終止狀態)最近公共祖先

f[i][j][k]表示(初始狀態)距離(lca)為i,(終止狀態)距離(lca)為j,還剩k步的方案總數。

#include

#include

#include

using namespace std;

#define m 1000000007

#define ll long long

ll f[105][105][105];

ll d[5],e[5];

ll dp1[105][5],dp2[105][5];

ll _a,_b,_c;

void up(ll a, ll b, ll c)

ll dfs(ll i, ll j, ll k, ll a, ll b, ll c)

else

if (i==0&&j>0)

if (i==0&&j==0)

return f[i][j][k]%m;

}}int main()else

if (dp1[i-1][1]-dp1[i-1][0]>dp1[i-1][2]-dp1[i-1][1])else

break;

}int ans1=-1,ans2=-1;

for (int i=0;i<=z;++i)

if (ans1!=-1) break;

if (i==z) break;

if (dp2[i][1]-dp2[i][0]2]-dp2[i][1])else

if(dp2[i][1]-dp2[i][0]>dp2[i][2]-dp2[i][1])else

break;

}if (ans1==-1)

for (int i=0;i<=100;++i)

for (int j=0;j<=100;++j)

for (int k=0;k<=100;++k)

f[i][j][k]=-1;

for (int i=0;i<=100;++i)

for (int j=0;j<=100;++j) f[i][j][0]=0;

f[0][0][0]=1;

printf("%lld\n",dfs(ans1,ans2,z,e[0],e[1],e[2])%m);

} return

0;}

樹形DP 兔子跳躍之謎下

題目描述 小生和小森在玩兔子之謎遊戲。有三隻兔子排成一排。知道每只兔子的初始位置,以及三個兔窩的位置。遊戲的規則是,重複以下步驟k次 選擇兩個不同的兔子a和b,分別位於a和b。a可以跳過b到達2 b a的點 跳躍是不允許其他小兔子已經在點2 b a的位置上 跳躍也不允許一次跳過乙個以上的兔子 現在小...

兔子與兔子

很久很久以前,森林裡住著一群兔子。有一天,兔子們想要研究自己的 dna 序列。我們首先選取乙個好長好長的 dna 序列 小兔子是外星生物,dna 序列可能包含 26 個小寫英文本母 然後我們每次選擇兩個區間,詢問如果用兩個區間裡的 dna 序列分別生產出來兩隻兔子,這兩個兔子是否一模一樣。注意兩個兔...

未解之謎與已解之謎

使用連線符 輸出雙引號public class test 輸出單引號 直接寫當引號system.out.println class aritest num1和num2資料型別為int,所以經過除運算之後 的結果自動轉化為int 2 再 num2,所以輸出結果為10.同理double result3 ...