日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jzoj3508-好元素【hash,优雅的暴力】

發布時間:2023/12/3 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jzoj3508-好元素【hash,优雅的暴力】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正題


大意

一個序列A,求滿足

An+Am+Ap=Ai(n,m,p<i)An+Am+Ap=Ai(n,m,p<i)
這個要求的 AiAi的個數


解題思路

我們先移一個項

An+Am=Ai?ApAn+Am=Ai?Ap
然后用hash表儲存 An+AmAn+Am的所有答案,然后到達一個數的時候枚舉 pp就可以O(n2)O(n2)求出答案
玄學的是map庫只有40,這個故事告訴我們不要偷懶


代碼

#include<cstdio> #include<algorithm> #define maxn 25000004 using namespace std; int n,s,hash[maxn+10],a[5001]; bool v[maxn+10]; int hashmath(int x) {return (x%maxn+maxn)%maxn;} int locate(int x)//查找位置 {int i=0,w=hashmath(x);while (i<maxn&&v[(w+i)%maxn]&&hash[(w+i)%maxn]!=x)i++;return (w+i)%maxn; } void ins(int x)//插入 {int w=locate(x);hash[w]=x;v[w]=true; } bool find(int x)//查找 {int w=locate(x);if (hash[w]==x&&v[w]) return true;else return false; } int main() {//freopen("good.in","r",stdin);//freopen("good.out","w",stdout);scanf("%d",&n);for (int i=1;i<=n;i++){scanf("%d",&a[i]);for (int j=1;j<=i;j++){if (i!=j&&find(a[i]-a[j]))//查找{s++;//統計答案break;//退出循環}}for (int j=1;j<=i;j++)ins(a[i]+a[j]);//加入新的答案}printf("%d",s); }

總結

以上是生活随笔為你收集整理的jzoj3508-好元素【hash,优雅的暴力】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。