【做题记录】[NOIP2016 普及组] 魔法阵
生活随笔
收集整理的這篇文章主要介紹了
【做题记录】[NOIP2016 普及组] 魔法阵
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
P2119 魔法陣
2016年普及組T4
題意:
給定一系列元素 \(\{X_i\}\) ,求滿足以下不等式的每一個元素作為 \(a,b,c,d\) 的出現次數 。
\[\begin{cases}X_a<X_b<X_c<X_d \\ X_a-X_b=2\times (X_d-X_c) \\X_b-X_a<\dfrac{X_c-X_b}{3}\end{cases} \]題解:
設 \(X_d-X_c=t\) ,則 \(X_a-X_b=2\times t\) 。
帶入第三個式子,可得:\(2\times t<\dfrac{X_c-X_b}{3}\) 。
變形得:\(6\times t+k=X_c-X_b\) ,其中 \(1\le k\le n\) 。
因為 \(A\ge 1\) 且 \(D\le n\) ,所以 \(1\le9\times t \le n-1\) 。
則有了這么一幅圖:
考慮枚舉 \(t\) :
-
枚舉 \(A=[n-9\times t-1,\dots,1]\) :
對于一對 \([A,B]\) ,\([C,D]\) 的最小值當 \(k=1\) 時取到 。而對于一對能形成魔法陣的 \([X_c,X_d]\) ,\([X_i(X_i>=X_c),X_j(X_j>X_d)]\) ,也能形成魔法陣 。則可以用后綴和優化 。
-
枚舉 \(D=[2+9\times t,\dots,n]\) :同理,用前綴和優化 。
代碼:
int n,m,a[Maxn],cnt[Maxn],ans[4][Maxn];n=rd(),m=rd(); for(int i=1;i<=m;i++) a[i]=rd(),cnt[a[i]]++; for(int t=1,tmp;9*t<n;t++) {tmp=0; for(int A=n-t*9-1;A>=1;A--){int D=A+t*9+1,B=A+2*t,C=D-t;tmp+=cnt[C]*cnt[D];ans[0][A]+=tmp*cnt[B];ans[1][B]+=tmp*cnt[A];}tmp=0; for(int D=t*9+2;D<=n;D++){int A=D-t*9-1,B=A+t*2,C=D-t;tmp+=cnt[A]*cnt[B];ans[2][C]+=tmp*cnt[D];ans[3][D]+=tmp*cnt[C];} } for(int i=1;i<=m;i++) printf("%d %d %d %d\n",ans[0][a[i]],ans[1][a[i]],ans[2][a[i]],ans[3][a[i]]); 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的【做题记录】[NOIP2016 普及组] 魔法阵的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【做题记录】[NOI2008] 假面舞会
- 下一篇: cm是什么单位 cm是什么长度单位