1. 程式人生 > >[期望概率]2016多校聯合7 Knights

[期望概率]2016多校聯合7 Knights

我是看這個懂的

思路:因為最後一個騎士肯定是往左走擊敗之前剩餘的所有騎士,

所以只要考慮前面i−1個格子之後向右的騎士有j個的概率,考慮dp

(其實時間這個概念在這裡不重要,因為如果前面有一個向左的騎士,那麼如果它不變成向右走(變成向右走當且僅當它把之前向右走的殺完,活著的只剩它一個,此時特判),那麼它一定不會死在與i的戰鬥裡,它只會對向右的個數產生影響,然後死在i與向右走的騎士戰鬥之前,所以在考慮與第i個搏殺中,只需考慮前i個位置經過數輪搏殺(前i個位置中向左與向右的搏殺)最後有j個往右走的情況)

f[i][j]代表前i個位置經過數輪搏殺(前i個位置中向左與向右的搏殺)最後有j個往右走

#include <assert.h> //設定插入點
#include <ctype.h>   //字元處理
#include <errno.h>     //定義錯誤碼
#include <float.h>     //浮點數處理
#include <limits.h>    //定義各種資料型別最值常量
#include <locale.h>    //定義本地化函式
#include <math.h>     //定義數學函式
#include <stdio.h>     //定義輸入/輸出函式
#include <stdlib.h>    //定義雜項函式及記憶體分配函式#include <string.h>    //字串處理
#include <time.h>     //定義關於時間的函式#include <wchar.h>     //寬字元處理及輸入/輸出
#include<iostream>
#include <string.h>
#include <stdio.h>
#include <memory.h>
using namespace std;
typedef long long ll;
const long long mod=1e9+7;
long long T,n,o,t,a[10000],f[1010][1010];
ll pm(ll a, ll k){
    ll res = 1;
    while(k){
        if(k&1) res = (res*a)%mod;
        a = (a*a)%mod;
        k >>= 1;
    }
    return res;
}
int main()
{
  cin>>T; o=pm(2,mod-2); 
  while (T--)
  {
      cin>>n; 
     //  cout<<o<<endl;
      for (int i=1;i<=n;i++)  cin>>a[i];
      memset(f,0,sizeof(f));
      f[1][1]=1;
      for (int i=2;i<=n;i++)
    { 
      if (a[i]==1 && i!=n) 
      {for (int j=1;j<=i;j++) f[i][j]=f[i-1][j-1];}
        else 
       {for (int j=i;j>=2;j--)
         f[i][j]=(f[i][j+1]*o+f[i-1][j]*o)%mod;
         f[i][1]=(f[i][2]+f[i-1][1])%mod;
       }}
       cout<<"Case #"<<++t<<": "<<f[n][1]*o%mod<<endl;
    }

相關推薦

[期望概率]2016聯合7 Knights

我是看這個懂的 思路:因為最後一個騎士肯定是往左走擊敗之前剩餘的所有騎士, 所以只要考慮前面i−1個格子之後向右的騎士有j個的概率,考慮dp (其實時間這個概念在這裡不重要,因為如果前面有一個向左的騎士,那麼如果它不變成向右走(變成向右走當且僅當它把之前向右走的殺完,活

聯合訓練2016---hdu5798Stabliztion

一個壓縮狀態 + 記憶搜尋/DFS非順序列舉 的題目。。 TLE的同學記得一定要用G++提交。否者如果是C ++ ,標程都TLE。表示時間限制很緊,標程都是1800ms,我的是2800ms...... 首先很容易想到的思路是,,X的每一位如果是1.都會對10^5個數產生影響

hdu 5381 The sum of gcd 2015聯合訓練賽#8莫隊算法

names 來看 efi nbsp span ems multipl script there The sum of gcd Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K

HDU 5305 Friends (搜索+剪枝) 2015聯合第二場

scan str iostream dsm || init div dfs ring 開始對點搜索,直接寫亂了。想了想對邊搜索,盡管復雜度高。剪枝一下水過去了。 代碼: #include<cstdio> #include<iostream> #

hdu 5361 2015聯合訓練賽#6 最短路

sample ssi %d 兩個 int chm das enter needed In Touch Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Othe

2009 7

map 快速冪 輸出 return wap () int print img 中間那幾場 不太會 B HDU 2873 n *m矩陣 #表示有炸彈 選這個炸彈後可以在 他上面 左邊 任意位子 產生一一個炸彈 丟到1,1的自動爆炸 最後沒的弄就輸掉 sg

HDU 5371 (2015聯合訓練賽第七場1003)Hotaru&#39;s problem(manacher+二分/枚舉)

2015多校 while bre 算法 down ice man 暴力 turn pid=5371">HDU 5371 題意: 定義一個序列為N序列:這個序列按分作三部分,第一部分與第三部分同樣,第一部分與第二部分對稱。 如今給你一個長為n(n

hdu 5358 First One 2015聯合訓練賽#6 枚舉

input blank include word-wrap accep acc wan pre ant First One Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131

HDU 5289 Assignment(聯合第一場1002)

max auth uac source name min test targe das Assignment Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java

【補題】聯合訓練第一場

microsoft range else result tdi ask lis positive -1 1001 Add More Zero Problem Description There is a youngster known for amateur pro

【補題】聯合訓練第二場

num isf scan logs n-2 urn open interval names 第二場 1001 Is Derek lying? Problem Description Derek and Alfia are good friends.Derek is Chin

20157場 HDU 5379 Mahjong tree 構造,DFS

print () name long scanf 2015多校 printf color tree 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=5379 題意:一顆n個節點n-1條邊的樹,現在要給每個節點標號(1~n),要求

2016第4場 HDU 6076 Security Check DP,思維

pro begin sizeof || i++ 預處理 通過 第一個 ans 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=6076 題意:現要檢查兩條隊伍,有兩種方式,一種是從兩條隊伍中任選一條檢查一個人,第二種是在每條隊伍

20177場 HDU 6129 Just do it 找規律

ble nbsp bool name def ons spa esp bre 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=6129 題意:求a序列後m次xor前綴和 解法: 手動對1位置對每個位置的貢獻打表發現 第一次 貢

HDU6301-2018ACM暑假聯合訓練1004-Distinct Values

一個 sum ram lds i++ lex cin case ever 題意是一個長度為n的序列,給你m組區間(l,r),在這個區間裏不能填入重復的數字,同時使整個序列字典序最小 同學用的優先隊列,標程裏使用的是貪心同時使用set維護答案序列 貪心是先采用pre數組來確定

2018 聯合訓練 4

多校聯合訓練 聯合 ble 多校 訓練 problem pro 多校聯合 Problem A Problem B Problem C Problem D Problem E Problem F Problem G Problem H Problem I Pro

HDU contest808 ACM7場 Problem - 1008: Traffic Network in Numazu

維護 problem .org over 遺憾 date_add switch lse 怎麽 首先嘚瑟一下這場比賽的排名:59 (第一次看到這麽多 √ emmmm) 好了進入正文QAQ ...這道題啊,思路很清晰啊。 首先你看到樹上路徑邊權和,然後還帶修改,不是顯然可以想到

ACM聯賽7 2018 Multi-University Training Contest 7 1009 Tree

ive tdi ini 我們 gis which print tmp bool 【題意概述】   給一棵以1為根的樹,樹上的每個節點有一個ai值,代表它可以傳送到自己的ai倍祖先,如果不存在則傳送出這棵樹。現在詢問某個節點傳送出這棵樹需要多少步。 【題解】   其實是把“

HDU 5727 Necklace ( 2016、二分圖匹配 )

tin 進行 clas open cond c++ sin 多校 %d 題目鏈接 題意 : 給出 2*N 顆珠子、有 N 顆是陰的、有 N 顆是陽的、現在要把陰陽珠子串成一個環狀的項鏈、而且要求珠子的放置方式必須的陰陽相間的、然後給出你 M 個限制關系、格式為 ( A、B

HDU 5820 Lights (20167L,主席樹)

題意  給定n個平面上的點,座標範圍為[1, 50000]。如果對於任意兩個點,都可以通過直走(中途經過其他點)走到。    那麼輸出YES,否則輸出NO。   首先排序,去重。 我們要找的點對是隻能斜對角走到的點。 那麼找到這個點正左邊的離他最近的點和正上方最近的點。查詢以這三