555我好弱啊
都說今年的hnoi是無腦資料結構賽,都很好想只是碼**的問題,然而我還是不會做這道題。
要退役了啊啊啊。
首先我們令si
表示以i 為開頭的字尾形成的數字。 對於p
≠2且p
≠5的時候,我們可以發現,若存在l,
r ,滿足sl
≡sr+
1(modp
) ,則區間[l
,r] 組成的數字一定是
p 的倍數,那麼問題轉化為求區間中有多少相同的數的對數,就可以用莫隊演算法來解決了。 當p
=2或p
=5的時候,預處理一下就好了。
#include
#include
#include
#include
#include
#include
using namespace std;
const int n=100005;
int n,m,cnt,block;
long long p,ans;
char str[n];
int belong[n],id[n],num[n];
long long s1[n],s2[n];
long long s[n],ans[n];
mapint> mp;
struct query
q[n];
inline long long read()
while (c>='0'&&c<='9')
return a*f;
}inline bool operator<(query a,query b)
inline void solve()
}int main()
block=(int)sqrt(n);
for (int i=1;i<=n;i++)
belong[i]=(i-1)/block+1;
long long base=1;
for (int i=n;i;i--)
for (int i=1;i<=n+1;i++) id[i]=mp[s[i]];
m=read();
for (int i=1;i<=m;i++)
q[i].l=read(),q[i].r=read()+1,q[i].id=i;
sort(q+1,q+m+1);
int l=1,r=0;
for (int i=1;i<=m;i++)
for (int i=1;i<=m;i++)
printf("%lld\n",ans[i]);
return
0;}
bzoj4542 Hnoi2016 大數 莫隊
小 b 有乙個很大的數 s,長度達到了 n 位 這個數可以看成是乙個串,它可能有前導 0,例如00009312345 小b還有乙個素數p。現在,小 b 提出了 m 個詢問,每個詢問求 s 的乙個子串中有多少子串是 p 的倍數 0 也 是p 的倍數 例如 s為0077時,其子串 007有6個子串 0,...
BZOJ4542 Hnoi2016 大數 莫隊
小 b 有乙個很大的數 s,長度達到了 n 位 這個數可以看成是乙個串,它可能有前導 0,例如00009312345。小b還有乙個素數p。現在,小 b 提出了 m 個詢問,每個詢問求 s 的乙個子串中有多少子串是 p 的倍數 0 也是p 的倍數 例如 s為0077時,其子串 007有6個子串 0,0...
HNOI2016 大數(number)《莫隊》
一道典型的莫隊。先預處理出字尾,即f i 表示i n 1 mod p 的值.但p的值不小,顯然不能直接存,加乙個離散化。觀察題目,發現一串數s l r 整除p滿足s l n 1 p s r 1 n 1 p 但p值為2或5不滿足這個性質需要特判 不過資料中好像沒有,於是筆者沒寫,有興趣的可以自己去寫寫...