傳送門
根據題意,需要知道神杖所包含了哪些咒語,大可使用自動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 式,移...