小紅帽的畫筆 NOIP模擬賽Round 7

2022-05-16 03:48:22 字數 2423 閱讀 7658

又到了神奇的模擬賽時間~

真是喪~

好吧我們來看看題目

小紅帽是pop star上最著名的人類畫家,她可以將任何畫出的東西變成真實的物品。賦予她這樣神奇能力的正是她手上的畫筆。

小紅帽每次作畫時,都需要用到她的調色盤,我們把每個自然數都對應一種顏色,那麼小紅帽的調色盤就可以看成是乙個斐波那契數列(數列第12項都為1,小紅帽每次需要一種顏色時,她都會用畫筆蘸取一段區間,得到的顏色就是區間裡所有的數之和。

受到秋之國人民的邀請,小紅帽要為他們畫乙個夏天。小紅帽要進行n次取色,給出每次蘸取的區間[l,r],作為小c委派來進行記錄的你需要輸出每次小紅帽得到的顏色,答案對mod取模

【資料範圍】

對於10%的資料,n<=100,l,r<=10^4;

對於30%的資料,l,r<=10^7;

對於90%的資料,mod<=10^9;

對於100%的資料,0<=n<=1000,1<=l<=r<=10^18,0————————————————我是分割線————————————————————

很顯然,這道題目就是求斐波那契數列前r項的字首和減去前l-1項的字首和,普通的dp都可以做到求斐波那契數列,但是很顯然10^18我們就會t

在此我們講講矩陣乘法

矩陣乘法,顧名思義,就是2個矩陣相乘。具體如下

所以呢我們如果要算斐波那契數列的第n項只需要將圖中的

矩陣自乘n-2次,再乘第乙個矩陣,得到的矩陣的第乙個數就是答案

那麼我們又怎樣求字首和呢?

在此有兩種方法供參考

top1:找規律

我們假設a,b為斐波那契數列的第一項和第二項

那麼我們很顯然就可以遞推出後面的幾項

那麼這有什麼規律呢?

很快就發現了規律

a=a+b-b;a+b=a+2b-b;2a+2b=2a+3b-b;3a+4b=3a+5b-b.....

所以我們只需要求num[r+2]-1-(num[l-1+r]-1)=num[r+2]-num[l-1]即可啦

top2:構造矩陣

顯然我們知道我們要保留答案矩陣的前面2個數,而我們想辦法構造出第三個數,用於計算字首和。這樣將這個矩陣自乘n-2次,輸出第三個數就好啦。

然後我們會想到我們的字首和就是sum[i]=sum[i-1]+num[i];

然後就會構造出這個矩陣啦

———————————————我是分割線—————————————————

那麼我們還看到乙個問題,如何處理mod?

我們知道如果mod為10^18

那麼一次乘法操作的數會達到10^36

如果是這樣我們就需要做高精除+高精乘了。

但是有沒有更快的方法?

首先我們知道如果在加法中進行取餘,結果不改變。

所以我們將乘法轉變為加法

這樣速度雖然慢了點,卻不會爆long long

然後這道題就愉快解決啦!

下面貼**

#include#include

#include

using

namespace

std;

intn;

struct

matrix;

unsigned

long

long

l,r,mod;

long

long mul(long

long x,long

long

y)matrix multiply(matrix a,matrix b)

c.mat[i][j]=sum;

}return

c;

} matrix matmod(matrix a,unsigned

long

long

k)

return

res;

}unsigned

long

long work(unsigned long

longx)

intmain()

return0;

fclose(stdin);

fclose(stdout);

}

2015 10 31的NOIP模擬賽

這是noip前的最後一周了。第一題是個組合數學的問題,規模不算太大。但第一反應就直接dp了,o n 2 的複雜度,始終想不到優化。本來看著1 3 4 6 10 15一串串數覺得多熟悉的,就是想不起來那是組合數。最後只有80分 第二題算是基本想到了吧,但是忽略了乙個問題 我的想法是每行0的個數要麼是當...

NOIP模擬賽 盟主的憂慮

顯然任意所求路徑就只經過一條密道,然後呢,畫圖發現就是乙個個環,然後可以用並查集來維護屬於乙個環或者是直接賦值 includeusing namespace std long long read while ch 0 ch 9 return num struct ooedge 200005 stru...

noip模擬賽 czy的後宮

czy要妥善安排他的後宮,他想在機房擺一群妹子,一共有n個位置排成一排,每個位置可以擺妹子也可以不擺妹子。有些型別妹子如果擺在相鄰的位置 隔著乙個空的位置不算相鄰 就不好看了。假定每種妹子數量無限,求擺妹子的方案數。輸入格式 輸出格式 輸出只有乙個整數,為方案數 這個數字可能很大,請輸出方案數除以1...