居然第一步膜化乘除 都沒看出來,沒救了...
大概是貢獻字首和優化的做法
巨兔式講解:大家都學會了麼?
咱發現有大量的 (i/j , i%j ) 同時 對很多 c 產生了貢獻,咱可以去優化這一部分的轉移,具體做法就是根據前面能加的後面也能加,然後一路累加且算貢獻
對於小於根號的所有 i/j ,咱可以優化這一部分轉移,然後對於大於根號的 i/j ,暴力算就好了,兩者複雜度都是是 n 根號 n 的
//by judge
#include#define rg register
#define fp(i,a,b) for(rg int i=(a),i=(b)+1;ii;--i)
#define ll long long
#define eps 1e-8
using namespace std;
const int mod=123456789;
const int m=1e5+3;
typedef int arr[m];
#ifndef judge
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?eof:*p1++)
#endif
char buf[1<<21],*p1=buf,*p2=buf;
inline int read() char sr[1<<21],z[20];int ccf=-1,z;
inline void ot()
inline void print(int x,char chr='\n') int n,bl; arr a,b,c; double inv[m];
#define div(x,y) (int(x*inv[y]+eps))
int main()
c[k]=(c[k]+now)%mod; // 當前的 now 存在的之前的狀態當前 k 也可達
} }fp(i,1,n) fp(j,1,i) if(div(i,j)<=bl) break;
else c[i]=(c[i]+1ll*a[div(i,j)]*b[i%j]%mod)%mod;
fp(i,1,n) print(c[i]); return ot(),0;
}
艹...這 t2 ,真 tm 長芝士了 ,支配樹的新奇打法...
一眼看不出是支配樹,只覺得題面眼熟,然後發現其實演算法更加熟...
然後發現支配樹**很長,調掛了,於是康康題解區對比找找自己**掛了,於是有了這次驚人的發現
可以說是支配樹板子題辣,這裡的常規做法就不說了,又臭又長 (艹)
這裡用的方法很詭(qiao)異(miao),大概就是說咱把這個 dag 縮一下,對於入度大於 2 的節點把 fa 設為 所有父親節點的 lca ,求解的時候輸出兩個點 lca 的深度就好了,至於兩個點不在同一棵樹上(或者是別的無解情況),是可以被非常自然的處理掉的(霧),於是正確性就有了感性理解下的保證
然後咱可以發現這裡的 lca 是要隨著拓撲的進行可以同時維護的...所以就打不了小常數的樹剖了,於是順便重溫了一下倍增 lca (霧)
具體康康**咯?
卡了下常,進了 rank1 (可能您康到咱的**之後就不是了)
//by judge
#include#include#define rg register
#define fp(i,a,b) for(rg int i=(a),i=(b)+1;ii;--i)
#define go(u) for(rg int i=head[u],v=e[i].to;i;v=e[i=e[i].nxt].to)
using namespace std;
const int m=1e5+7;
typedef int arr[m];
#ifndef judge
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?eof:*p1++)
#endif
char buf[1<<21],*p1=buf,*p2=buf;
inline int read() char sr[1<<21],z[20];int c=-1,z;
inline void ot()
inline void print(int x,char chr='\n') int n,m,pat,hd,tl,f[m][19]; arr head,lg,q,h,d;
struct edgee[m<<1];
inline void add(int x,int y),head[x]=pat;
}inline int lca(int u,int v)
int main()
inline int read() int n,p,head,tail,x,y; arr a,b,c,f[2],q,w;
inline void solv(){ n=read(),p=read(); fp(i,1,n) a[i]=read();
fp(i,1,n) b[i]=read(); fp(i,1,n) c[i]=read(); fp(i,1,p) f[0][i]=inf;
fp(i,1,n){ head=1,tail=0,x=i&1,y=x^1; fp(j,0,p) f[x][j]=f[y][j];
fp(j,a[i],p){ while(head<=tail&&w[tail]>=f[y][j-a[i]]) --tail;
while(head<=tail&&q[head]明天繼續吧...
CSP S全國模擬賽第四場 nan?
本來想搶三題的 rk1 無恥 最後發現 t2 好像還是慢了些,只搞了個 rk2 第一題隨便分析一下,發現一段區間中某個元素的貢獻次數就是 x 1 y 1 x 是他左邊的元素個數,y 是右邊 當然指的是詢問區間內 由於異或的性質,乙個元素最終貢獻次數膜 2 後結果一樣 那麼我們發現對於長度為偶數的區間...
暑期個人賽 第三場 A
a.學姐的數碼管 2014新生暑假個人排位賽03 時間限制 1000 ms 記憶體限制 65536 kb 題目描述 學姐的七段數碼管玩的出神入化。現在給你乙個浮點數,你需要把它以七段數碼管的形式輸出出來。乙個 2 n 1 n的矩陣來表示七段數碼管,若下標均從0開始,則以第0列的兩個,第n 1列的兩個...
JNU第三場訓練賽題解
include includeusing namespace std int a 150 int main for int i 1 i n i printf d a i puts 埃氏700ms,線篩231ms include include includeusing namespace std i...