CF835C Star sky(模擬 二維字首和)

2021-08-04 17:26:32 字數 998 閱讀 9024

題目大意:給你個100*100的棋盤,有些點上有點權,會隨時間改變。設點權為x(x<=10),則在時間t他的點權為(t

+x)%

(c+1

) 。每次詢問給你時間t,和乙個矩陣範圍(x1,y1,x2,y2),問你矩陣覆蓋區域內的點權和是多少。因為棋盤範圍很小,權值種類也很少,所以我們預處理乙個陣列cnt[k][x][y],表示(1,1,x,y)矩陣內點權為k的點的個數。用容斥原理處理就好了。。o(

c∗1002

) 然後對於每次詢問,答案即為∑k

=0c(

k+t)

%(c+

1)∗n

um[k

][x1

][y1

][x2

][y2

] .num陣列表示(x1,y1,x2,y2)矩陣範圍內點權為k的點的個數,由cnt陣列利用容斥原理可以o(

1)的得到。所以每次詢問可以在o(

c)的時間內得到。

#include 

#include

#define n 105

int n,q,c,cnt[11][n][n];

inline int

read()

while(ch>='0'&&ch<='9') x=x

*10+ch-'0',ch=getchar();

return

x*f;

}int main()

for(int

x=1;x

<=100;++x)

for(int

y=1;y

<=100;++y)

for(int k=0;k<=c;++k)

cnt[k][x][y]+=cnt[k][x-1][y]+cnt[k][x][y-1]-cnt[k][x-1][y-1];

while(q--)

printf("%d\n",ans);

}return

0;}

cf835 預處理 記憶化dp

題意 定義 k 度回文串為左半部分和右半部分為 k 1 度的回文串 給出乙個字串 s,問 1 s.size 度回文串的數目分別為多少 思路 預處理 記憶化dp 可以先花 o n 2 的時間預處理一下所有字串是否為回文串 注意預處理時不能直接列舉 l,r,不然會出現處理 l,r 時 l 1,r 1 並...

CF 392 2 C 暴力模擬

cf 392 2 c.unfair poll 題意 n行m列人,老師點k次名。點名次序,每一行都是從1到m,但行是按1,2.n 1 n,n 1 n 2 1,2,3.n 1 n.求點完k次名後被點的最多的次數和最少的次數,以及給定的 x,y 被點次數。總結 有點麻煩,但還是很好找規律,只是fst了,有...

CF1020B Badge 模擬鍊錶

n個點 n 1000 接下來n個整數表示ai 第i個數ai表示i到ai有一條邊 輸出 n個數 表示從第i個點出發,最先被訪問兩次的點 樣例1 從1 出發,先到達2,2會到達3,3又到達2.2被訪問第二次。輸出 2 從2 出發,先到達3,3到達2,2被訪問兩次,輸出 2 從3 出發,先到2 2 又到3...