BJOI2019 奧術神杖

2022-10-09 00:03:23 字數 1190 閱讀 1489

傳送門

根據題意,需要知道神杖所包含了哪些咒語,大可使用自動ac自動機。

關鍵是如何處理\(\sqrt[c]\)。 這其實也很套路,一眼看過去,覺得根號這個東西顯然就不可做,於是想辦法消去根號。於是對於這個式子取對數,\(\sqrt[c]=\frac[magic = v_1 + v_2 + ... + v_n]\)

對於\(\frac\)這種形式的答案,很顯然可以01分數規劃來解決(其實就是二分答案),然後在ac自動機上去dp,check當前二分的值是否可行即可。

**常數較大(luogu上o2可過),大可適當調整\(eps\)

#includeusing namespace std;

const int max_n = 3000 + 5;

const int max_m = 3000 + 5;

const int maxchar = 10;

const double inf = 0x3f3f3f3f;

const double eps = 1e-4;

int n,m;

char a[max_m];

struct ahocorasickautomaton

inline void insert(char *s,int val)

val[p]=log(val);

num[p]++;

}inline void build()}}

else f[p][x]=dfs(nxt[p][a[x]-'0'],x+1),pos[p][x]=a[x]-'0';

vis[p][x]=1;f[p][x]+=w[p];

return f[p][x];

} inline bool check(double mid)

inline void print()

}inline void calc()

memset(vis,0,sizeof(vis));

for(int i=1;i<=tot;++i) w[i]=val[i]-(double)num[i]*l;

dfs(1,1);

print();

}}acam;

char s[max_m];

int main()

acam.build();

acam.calc();

return 0;

}

BJOI2019 奧術神杖

傳送門 首先w1w2 w3 w nn sqrt n nw1 w2 w3 wn 可以利用對數轉化 l og 2w1w 2w3 wnn 1n l og2w ilog 2 frac sum log 2 w i log2 n w1 w 2 w3 wn n 1 l og2 wi 那麼令ti log2 wi t...

題解 BJOI2019 奧術神杖

題目傳送門 給出乙個殘缺的字串,每個位置都 in 0,9 有 m 中貢獻,即 s,k 表示該字串中沒出現一次 s 貢獻便乘上 k 最後對貢獻求 c 次根,其中 c 是總出現次數。求貢獻的最大值。字串長度以及貢獻字串長度之和 le 1500 首先你需要想到我們可以全部取 ln 然後每次貢獻就是 k 求...

BJOI2019 光線 遞推

題目鏈結 令 f i 表示光線第一次從第一塊玻璃射出第 i 塊玻璃的比率。令 g i 表示光線射回第 i 塊玻璃,再射出第 i 塊玻璃的比率。容易得到 beginf i f a i f b ig i g i b a i b b ig i a g a i a g b ig i end 對於 2 式,移...