玲瓏杯1141 fft計數

2021-08-02 23:59:11 字數 2535 閱讀 8994

1141 - 喵哈哈村的智慧型大師丶).嫵鈳取玳°月

time limit:1s

memory limit:256mbyte

submissions:173solved:41

description

丶).嫵鈳取玳°月是月大叔的id,他是乙個智商高達429的智力大師,最擅長的技能就是搞事。今天他又要開始搞事了。

現在有n個元素ai

ai然後現在有q個詢問,每次月大叔想問一共有多少對pair,滿足a[i]+a[j]>=k(其中 i

input

輸入第一行包含乙個正整數

t(1≤t

≤100

)t(1≤t≤100)

,表示有t組資料對於每組資料:第一行兩個整數n,q。表示有

n(1≤n

≤100000

)n(1≤n≤100000)

個元素,

q(1≤q

≤100000

)q(1≤q≤100000)

次詢問第二行n個整數

aiai

(1≤ai≤

100000

)(1≤ai≤100000)

,表示每個元素的大小。接下來q行,每行乙個

k(1≤k

≤200000

)k(1≤k≤200000)

,表示詢問。

output

對於每組測試資料的詢問,輸出有多少對即可。

sample input

15 51 2 3 4 512345

sample output

10101098

題目大意:

給你n個數q次查詢,每次詢問a[i]+a[j]>=k的對數(i

題目思路:

首先如果用普通的方法做複雜度是q*n,顯然超時,所以這裡我們很好想到的是將複雜度降至x*logn,對於這種計數的問題

可以用fft來預處理,fft可以在n*logn的時間預處理所有a[i]+a[j]的和的個數,在用個字首和,然後就可以o(1)時間查詢

所以總的複雜度是n*logn+q

ac**:

#include #include #include #include #include using namespace std;

const double pi = acos(-1.0);

struct complex

complex operator +(const complex &b)

complex operator -(const complex &b)

complex operator *(const complex &b)

};void change(complex y,int len)

if(j < k)j += k;

}}void fft(complex y,int len,int on)}}

if(on == -1)

for(int i = 0;i < len;i++)

y[i].r /= len;

}const int maxn = 400040;

complex x1[maxn];

int a[maxn/4];

long long num[maxn];//100000*100000會超int

long long sum[maxn];

int main()

sort(a,a+n);

long long max;

if(n>1)

max = a[n-1]+a[n-2];

int len1 = a[n-1]+1;

int len = 1;

while( len < 2*len1 )len <<= 1;

for(int i = 0;i < len1;i++)

x1[i] = complex(num[i],0);

for(int i = len1;i < len;i++)

x1[i] = complex(0,0);

fft(x1,len,1);

for(int i = 0;i < len;i++)

x1[i] = x1[i]*x1[i];

fft(x1,len,-1);

for(int i = 0;i < len;i++)

num[i] = (long long)(x1[i].r+0.5);

len = 2*a[n-1];

//減掉取兩個相同的組合

for(int i = 0;i < n;i++)

num[a[i]+a[i]]--;

//選擇的無序,除以2

for(int i = 1;i <= len;i++)

sum[0] = 0;

for(int i = 1;i <= len;i++) //求字首和

sum[i] = sum[i-1]+num[i];

while(q--)

}return 0;

}

「玲瓏杯」ACM比賽 Round 23

a 生是脂肪的人 time limit 2s memory limit 128mbyte submissions 263solved 97 description 給定乙個整數n,輸出 10 n 7 的個位數。其中 abs n 1e18 input 第一行是乙個正整數t 1 t 100 表示資料組數...

玲瓏杯」ACM比賽 Round 11 待補

題目 官方題解 直接貼上了,沒過的題以後再補 儘管不太可能qaq 第一題 直接列舉所有可能的x並且計算答案,得出最優解 水題,忽略 第二題 可以連線的兩個工廠相當於可以匹配的兩個點,那麼問題轉化為求兩個串的最長公共子串行,但o n 2 的複雜度會超時,由於第二個串每個點最多只有6個點與之匹配,所以可...

玲瓏杯 20 造物主的戒律

題目鏈結 題意給乙個序列每次詢問給l,r,x,k1,k2,每次查詢區間中小於等於x的所有數字裡面第k1小的值以及大於x的所有數字裡面第k2小的值,如果不存在,輸出 1 每次輸出兩個數,對於每個數如果不存在,則單獨輸出 1 主席樹模板題,找出 x的個數p,然後查詢區間第k1 k2 p小的數字。incl...