CSP S 2020 T3函式呼叫

2022-07-02 10:18:11 字數 1242 閱讀 5430

這道題的難度大概是這次提高組最難的一題了,考試時一直在想線段樹合併,發現時間過不了以後就放棄打了暴力。

關於這道題,可以容易發現,對於乘法操作,直接最後乘上即可,對於加法操作,只需要將加的數乘上後面乘的數就行了。

所以可以得出乙個做法:

首先可以考慮反著做一次拓撲排序,求出每次操作中包含了多少次乘法操作。

然後從後往前掃一遍所有詢問的操作,將乘法操作統計一下。

對於加法操作,發現乘上多少意味著重複了多少次這個操作,然後可以記錄一下每個操作後面要經過多少次操作,然後再來乙個拓撲排序,處理和乙個加法操作同級的操作中後面要進行的乘法操作。

然後這道題就做完了。

#include#include#include#define n 200000

#define m 2000000

#define ll long long

#define mo 998244353

using namespace std;

ll n,a[n],m,opt,q,q[n],qp[n],num,p[n],sum;

ll i,j,k,data[n],x,y,val,tot;

struct edgee[m],ep[m];

struct nodef[n];

void insert(ll x,ll y)

void insertp(ll x,ll y)

int main()

} }j=0;

for (i=1;i<=m;i++)

if (!f[i].out)

i=0;

while (i=1;i--)

for (i=1;i<=n;i++) a[i]=a[i]*val%mo;

j=0;

for (i=1;i<=m;i++)

if (!f[i].in)

i=0;

while (i

} }for (i=1;i<=m;i++)

if (f[i].add[1]) a[f[i].add[1]]=(a[f[i].add[1]]+f[i].times*f[i].add[2]%mo)%mo;

for (i=1;i<=n;i++) printf("%lld ",a[i]);

printf("\n");

return 0;

}

CSP S 2020 C 函式呼叫

其實並不是一道難題,只是不知道如何一步步算。首先想算出每個 1 操作的係數,這樣能省去很多重複步驟。觀察到 1 操作可以被分成單個函式 指直接出現在函式操作序列中 和被引用函式 被直接出現在函式操作序列中的第 3 類函式引用 對於每個 一種函式可能在函式操作序列中被直接呼叫多次 單個函式我們需要算出...

CSP S2020 函式呼叫(洛谷民間資料)

傳送門 其實除了第一題,剩下幾道出的都挺不錯的,至於賽制的改變我也不知道會帶來了什麼影響,畢竟我已經不是oi選手了 似乎又搞起了acm 廢話不多說。這道題思維難度真的挺大的,想了半天也沒想出正解,題解也是看了好長一段時間才懂,感覺自己原來沒這麼菜啊 所以這裡先隆重推出一篇題解 ak dream的 c...

Csp S 2020 T4 貪吃蛇 題解

這道題我調了好久 細節非常多。首先,看完題目後,可以發現這是一道博弈問題。那麼接下來,我們假設最強蛇為 x xx 最弱蛇為 y yy 那麼這裡就有兩個結論 如果 x xx 吃了 y yy 不是最弱的蛇,則 x xx 必吃 y yy 證明 假設當前第二強的蛇為 a aa 第二弱的蛇為 b bb 那麼 ...