201905 16 膜你賽 日程表

2021-09-22 20:14:56 字數 1546 閱讀 5070

題目:

【問題描述】

放暑假了,小 c 準備了乙個日程表來安排他的暑假生活.

一共有 n 件事情,編號為 1;2

;:::; n,第 i 件事情的難度為 i. 小 c 將整個暑假劃分為

m 個時刻,並設定了三個正整數 a; b; c. 然後,小 c 定義了乙個數列 fxig,滿足:

x0 =

0; xi =

(axi−1

+ b) mod 2nc (

1 ≤ i ≤ m)

即從 x1 開始,數列的每一項等於上一項的 a 倍加上 b 以後除以 2nc 的餘數.

在暑假剛開始時,小 c 的日程表是空的. 第 i 個時刻前,小 c 會根據 xi 的值決定日

程表的變化:

·若 xi < nc,則將編號為 ⌊ xci ⌋ +

1 的事件加入日程表,若日程表已有該事件則忽略;

·若 xi ≥ nc,則將編號為 ⌊ xci ⌋ − n +

1 的事件從日程表刪除,若日程表沒有該事件則

忽略;第 i 個時刻(1 ≤ i ≤ m),小 c 所做的事情就是該時刻日程表中的所有事件.

對於每個時刻,小 c 定義該時刻的工作量為該時刻做了幾件事情,該時刻的疲勞度為

該時刻做的所有事情的難度之和. 整個暑假小 c 的工作量為所有時刻的工作量之和,疲勞

度為所有時刻的疲勞度之和.

請根據 n; m; a; b; c 計算小 c 這個暑假的工作量和疲勞度.

【輸入格式】

輸入檔名為 schedule.in

輸入一行,五個由空格分隔的正整數 n; m; a; b; c.

【輸出格式】

輸出檔名為 schedule.out

一行兩個由空格分隔的整數,第乙個數為小 c 這個暑假的工作量,第二個數為小 c 這

個暑假的疲勞度.

由於答案可能很大,請輸出答案除以 1000000007 的餘數.

【樣例輸入 1】36

415【樣例輸出 1】

813

思路:

考試的時候一直在想怎麼統計答案……感覺是動態字首和,就寫了個bst騙了80分。

發現每一次答案和上一次相關,所以用bool陣列表示每個數在不在就可以,統計答案時可以利用上一次的答案加減。

**:

#includeusing namespace std;

#define maxn 50000000

#define ll long long

#define read(x) scanf("%lld",&x)

#define md 1000000007

#define lowbit(x) x&-x;

ll n,m,a,b,c;

bool f[maxn+5];

int main()

} else

} ans1=(ans1+cnt1)%md,ans2=(ans2+cnt2)%md; }

printf("%d %d",ans1,ans2);

return 0;

}

迴圈賽日程表

對於書上那個日程表的實現,第三版的課本給出了迴圈實現的方法,不過這個表的生成明顯要用遞迴方法生成更為合適,此表如下 可以看到每次該錶的生成總可以分成四個字表的填充過程,初始化讓左邊第一列填充上之後,然後每一次先遞迴填充左上角的子表,然後再填充左下角的子表,然後右上和右下的子表用copy的方法填充,實...

迴圈賽日程表

設有n個選手進行迴圈比賽,其中n 2 m,要求每名選手要與其他n 1名選手都賽一次,每名選手每天比賽一次,迴圈賽共進行n 1天,要求每天沒有選手輪空。輸入第一行為t,表示資料組數,對於每組資料就乙個m 1 m 10 對於每組輸入的m,輸出 形式的比賽安排表 1 3 1 2 3 4 5 6 7 8 2...

迴圈賽日程表

問題描述 設有n 2 k個運動員要進行網球迴圈賽。現要設計乙個滿足以下要求的比賽日程表 1 每個選手必須與其他n 1個選手各賽一次 2 每個選手一天只能參賽一次 3 迴圈賽在n 1天內結束。自己可以嘗試畫表找出規律,這是4個運動員參加比賽的日程表。左上角四格自身的規律 左上角四格與左下角四格的規律 ...