球 數學分析,模型構建

2022-03-14 08:02:33 字數 1716 閱讀 4343

我們假設, 一次可以擊打任意多相鄰連續的紅球,也可以只擊打乙個球。 並且紅球既不會落袋,也不會相

互發生碰撞,而只是停留在原處。每次擊打時候,要想「k到紅球」,至少要擊打乙個紅球,如果想一次擊打

多個紅球,那麼擊打 的紅球必須是依次連續排列的。 如果一次「k到紅球」所有紅球的標號之和的平均數大於

母球的標號 \(m\),就獲得了一 個「連擊」。

現在請你幫幫 hs_black 計算總共能有多少種「連擊」方案。注意:如果當前有標號為 \(1,2,3\) 的三種紅球,母球標號為 \(0\),有如下 \(6\) 種獲得「連擊」方 案:\((1),(2),(3),(1,2),(2,3),(1,2,3)\)

輸入共有兩行,第一行是\(n\),\(m\) (\(n⩽100000,m⩽10000\)) ,nn 表示檯面 上一共有 \(n\) 個紅球,\(m\) 表示

母球的標 號。 第二行是 \(n\) 個正整數,依次表示臺面上 \(n\) 個紅球的標號,所有標號均不超過 \(10000\)

輸出只有乙個數,為「連擊」的方案總數。

思路先說一下暴力,維護乙個字首和,\(n^2\)的時間複雜度掃一遍就行,

說正解,學會手玩式子還是挺重要的

我們要求的就是滿足\(\dfrac >m\)的區間的個數,這裡規定\(j>i\)

我們變形一下便會得到

\(sum\left[ j\right] -sum\left[ i\right] >mj-mi(j>i)\)

\(sum\left[ j\right] -mj >sum\left[ i\right] -mi(j>i)\)

不妨把\(sum[j]-mj\)和\(sum[i]-mi\)分別看成單獨的兩項,即\(v[j],v[i]\)

問題就簡化成了\(v[j]>v[i](j>i)\)

看到這個我們還是沒法用我們已知的演算法進行求解,我們看到這個形式不難會想到逆序對

只要我們再取一次反,不就變成了\(v[j]i)\),也就是求逆序對的問題嗎

歸併求或者樹狀陣列進行求解都是可以的

但是這個注意有個小細節,就是如果單獨的乙個數是大於\(m\)的,那麼它也是滿足條件的,

為了不漏掉這種情況,我們在數的最開始加乙個值為0的數

那會不會對其他情況產生影響呢,答案是不會的,因為我們的\(v\)早已經處理好了

**就是歸併排序求逆序對的寫法

#includeusing namespace std;

const int n=200000;

int sum[n];

int n,m;

int a[n];

template inline void read(t &x)

long long res;

int q[n],tmp[n];

long long merge_sort(int q,int l,int r)

}while(i<=mid)tmp[k++]=q[i++];

while(j<=r) tmp[k++]=q[j++];

for(int i=l,j=0;i<=r;i++,j++) q[i]=tmp[j];

return res;

}int main()

for(int i=1;i<=n;i++)

//產生新的sum陣列 產生方式就是sum[i]=-(sum[i]-mi)

merge_sort(sum,0,n);

cout

}

數學分析摘要

對於任何非空有上界的集合 a 其上界b的集合b含有最小元b 也就是說,存在唯一的元素b b使得 1 b 是集合a的上界,即對於一切a a 成立b a 2 b 是集合 b 的最小元素,也就是說對於一切b b,有b b 元素b 叫做集合a的上確界 記作 b sup a 同樣的,對於有下界的集合 a 其下...

工科數學分析之數學感悟

上課總有一頭霧水的時候,一頭霧水皆因神遊,某幾個概念沒有聽,課前也沒有預習,導致根本不知道講的名詞或者符號是啥意思,結果呈滾雪球狀之後全聽不懂。這時候我都是迅速翻書找這些概念,先弄懂了再跟著老師走。看來課前預習課後複習的學習方法什麼時候都不過時。大學之前學習數學,會得出乙個規律,最後算出來的答案往往...

訊號處理與數學分析

訊號處理與數學分析 在一般的講授數碼訊號基本理論的書中,數學推導往往佔據了很大的篇幅。更有甚者,通篇是數學推導,難得有文字的說明和物理的解釋。這往往給人一種錯覺,數字訊號處理的基本理論是不是必須要通過數學公式才能描述?訊號處理是不是只是數學分析的乙個分支?確實,數字訊號處理中的很多概念,從理論層面的...