時間限制: 1 sec 記憶體限制: 128 mb
題目描述
有乙個長長的走廊,巨神 ctt 把它分成m方格,從左到右編號為1,2,...,m。
有一天,巨神 ctt 得到了n個蹦床,他把這些蹦床放在方格裡,他在編號為1的方格裡放了乙個蹦床,在編號為2,3,...,m-1的方格中放置了n-1個蹦床(乙個方格只能放乙個蹦床)。
巨神 ctt 估算了自己的跳遠水平和蹦床的彈性,知道了他從第i個蹦床跳躍最多可以跳過li個方格(若這個蹦床放置的方格編號為k,則他最多能跳到編號為k+li的方格裡,l1表示從編號為1的方格裡的蹦床跳躍最可以跳過l1個方格),他開始計算從編號為1的方格,從左向右在蹦床上跳躍,最終到達編號為m的方格上,這樣跳躍的方式有多少種。
巨神 ctt 非常生氣,因為他直接秒出了答案,所以他用這繁雜的統計來考考你,但你的結果可以對109+7取模。
輸入第一行三個正整數n,m,l1,表示蹦床的個數、方格的個數和從編號為1的方格裡的蹦床跳躍最可以跳過的方格數。
接下來n-1行,每行兩個正整數,第i行的兩個正整數分別表示第i個蹦床所在方格的編號和從第i個蹦床跳躍最多可以跳過的方格數。
輸出僅一行乙個整數表示答案。
樣例輸入
【樣例1】樣例輸出3 5 3
2 14 1
【樣例2】
5 7 2
2 24 1
5 26 1
【樣例1】1【樣例2】
2
#include using namespace std;
typedef long long ll;
const int mod=1e9+7;
const int maxn=1e6+10;
struct nodea[maxn];
bool operator<(const node &a,const node &b)
ll f[maxn];
int n,m,p,ans;
int fl(int x) else l = mid + 1;
}return res;
}int fr(int x) else r = mid - 1;
}return res;
}int main()
}printf("%lld\n", (ans + f[n + 1]) % mod);
return 0;
}
B Light bulbs 離散化 差分
b.light bulbs 離散化 差分 題意 n個燈剛開始是關的,m次操作對 l,r 內的全部的燈反轉。問最後有幾個燈亮著。思路 剛開始差分直接便利了所有點,t了。所有只需要考慮哪些有貢獻的2 m個點就行了,對於區間中哪些0的部分,就不需要遍歷了。對於重複的點也不用管。include using ...
離散化系列 離散化 字首和 差分
區間和 acwing 802.區間和 這道題所展現的情況就是,資料並不是很多,利用到的元素值也不大,但關鍵就是下標太大,無法正常的以陣列下標來進行操作。因此,離散化,在這裡就是很合適了,把大的下標對映為小的下標後再進行處理。對於這道題的解題步驟具體可分為一下幾步 1.儲存,就是將所用用到的下標存起來...
upc 考試 離散化 差分
考試 時間限制 1 sec 記憶體限制 128 mb 題目描述 s中開展了省選集訓,有n位選手的實力參差不齊。眾所周知,如果題目太水,那麼就會有人ak離場後打遊戲,如果題目太難,那麼就會有人頹廢離場後打遊戲。作為出題人的你自然不希望有太多人出去打遊戲,不然ob就會很生氣。所以你需要設定題目的難度,盡...