2020 8 7上海月賽t2 甲組

2021-10-09 02:04:27 字數 2353 閱讀 3404

有 n

nn 只貓,每只貓各自擁有一些花生。一開始,所有貓擁有的花生數量都為 0

00。接下來的每一天,這些貓咪會得到、吃掉或交換一些花生。經過觀察發現,貓咪們每天的行為都是完全相同的,貓咪們在一天內的行為可以用 k

kk 個動作描述,給定貓咪們每天重複的動作序列,那麼經過 m

mm 天之後,每只貓咪會有多少花生呢?

輸入格式

第一行:三個整數分別表示 n

nn,m

mm 和 kkk;

接下來有 k

kk 行,描述了貓咪們一天內的行為,一行表示乙個動作,每一行的第乙個字元為乙個小寫字母:

1.以g開頭的動作後接乙個整數 i

ii,表示第 i

ii 只貓得到一粒花生;

1.以e開頭的動作後接乙個整數 i

ii,表示第 i

ii 只貓吃掉了它的所有花生;

3.以s開頭的動作後接兩個整數 i

ii 和 j

jj,表示 i

ii 只貓和第 j

jj 只貓交換了它們的花生。

輸出格式

單獨一行:輸出 n

nn 個整數,依次表示每只貓咪最後所擁有的花生數量。

資料範圍:

1

<=n

<

=100

1<=n<=100

1<=n

<=1

001

<=k

<

=100

1<=k<=100

1<=k

<=1

001

<=m

<=1

010

1<=m<=10^

1<=m

<=1

010輸入:

316

g 1g 2

g 2s 1

2g 3

e 2

輸出:

2

01

簡單看題後,發現m

mm特別大,n,k

n,kn,

k很小,又是讓你重複作變換,

可以想到矩陣快速冪

問題是加法運算怎麼辦?

將矩陣an,

na_

an,n

​變為an+

1,n+

1a_

an+1,n

+1​,即增加一維,然後在最後乘向量的時候把向量加上一維賦值1,就可以了

如果要進行加法運算,就在矩陣第n+1

n+1n+

1維改變值

時間複雜度o(n

3log

m)

o(n^3logm)

o(n3lo

gm)

#include

using

namespace std;

#define int long long

const

int maxn=

100;

struct matrix

}i;int n,m,k;

matrix operator*(

const matrix &a,

const matrix &b)

inline

intread()

;matrix fastpow

(matrix,

int)

;matrix make1

(int);

matrix make2

(int);

matrix make3

(int

,int);

signed

main()

ans=

fastpow

(ans,m)

;for

(register

int i=

1;i<=n;

++i)

printf

("%lld "

,ans.g[n+1]

[i])

;return0;

}inline

intread()

matrix fastpow

(matrix a,

int p)

return ans;

}matrix make1

(int x)

matrix make2

(int x)

matrix make3

(int i,

int j)

洛谷2019 3月月賽 T2

題幹 洛谷同款 t2?看似比t1簡單些 二維字首和嘛?多簡單 我天天拿二維字首和水dp 這是字首和的預處理 2333 處理出來所有的情況 某個地方要加上mod再 mod 如果沒有這一步 那麼 70pts 然後附帶5 的分值飛走。2333 然後.就a掉了 include using namespace...

模擬 2018 9洛谷月賽T2

傳送門 一道模擬題?根據給出的條件可以分類討論列出關於k的不等式,然後求區間的交 但是求交不好求,可以轉化成求補集的並,還是挺常見的套路 具體實現還是很有技巧的,可以用結構體存這個點和它的型別 左端點or右端點 然後通過排序求並,具體細節看注釋 include include include inc...

洛谷11月月賽 T2 不開心的金明

傳送門 一樣大水題,不過我現在都不知道我是怎麼被hack的。題目裡有這麼一句話 要求購物單上所有的物品 的極差 最貴的減去最便宜的 不超過3 資料範圍裡還有這麼一句話 min vi vi min vi 3 那麼,其實只有四種 了。我們稱它們為0,1,2,3 然後預處理每種 選i個的最大價值 直接暴力...