偽造隊形 FFT

2022-05-09 01:54:09 字數 1817 閱讀 3153

題目描述

tukkun帶著他的合唱隊去環形**廳參加演出。上場前,tukkun發現了嚴重的問題:**廳的工作人員把他們的合唱隊形搞錯了。

具體來說,tukkun的合唱隊有n個人圍成一圈,身高按照順時針順序記為a[0],a[1],...,a[n-1]。**廳的工作人員則以為他們的身高是b[0],b[1],...,b[n-1]。

tukkun只剩最後一點點時間了。由於舞台是環形的,在保證相對位置不變的前提下,tukkun可以讓他的隊員迴圈移動若干個身位。

另外,考慮到tukkun帶的隊伍裡都是小朋友,**廳可以將整個舞台整體抬高若干厘公尺,視為所有隊員身高增加同樣的數值。提高的高度只能為整數厘公尺。

以上兩種操作可以進行任意次。

tukkun的目標是讓新的隊形看起來像工作人員安排的隊形。

對於每個位置,定義這個位置的得分為身高偏差值的平方。這個偏差值就是這個位置上站的隊員身高與工作人員安排身高的差值。

你的目標當然是讓所有位置的得分之和最低了。

輸入第一行是兩個數n,表示合唱隊的人數。

第二行n個數a[i],表示tukkun的合唱隊員身高。

第三行n個數b[i],表示工作人員以為的合唱隊員身高。

輸出一行,最低得分。

樣例輸入

5120 130 140 150 160

180 180 200 180 180

樣例輸出

520樣例解釋

首先迴圈移動2個身位,使得隊形變為140 150 160 120 130。

之後將舞台墊高44厘公尺,最終隊形為184 194 204 164 174。

每個位置的分數是16 196 16 256 36,總和520。

資料範圍

20%:n<=200

40%:n<=3000

100%:n<=40000,所有身高值<=200

思路:將式子化開,化簡可得

要求最小值為f-2*g

其中 f(c)=σ(a[i]^2+b[i]^2+2*c*(a[i]-b[i])+c^2),g(s)=σ(b[i]*a[(i+s)%n])

因為調整身高不會超過200,因此,f可以列舉得到最值,而g是乙個卷積形式,我們用2*n和n的陣列求卷積,最終得到的3n陣列中間n個數字都是合法方案,在這之間選乙個最小的即可。

1 #include2 #include3 #include4 #include5 #include6 #include7

#define ll long long

8 typedef std::complexcd;

9const

double pi=acos(-1

);10 ll suma,sumb,sqra,sqrb,a[500005],b[500005],a[500005],b[500005],c[500005

];11

intn,lc,pos;

12long

long calc(int

h)15

long

long

f()20

return

res; 21}

22int bitrev(int t,int

n)27

void fft(cd *a,int n,int

rev)40}

41}42if (rev==-1)43

for (int i=0;ilen;

44for (int i=0;iy[i];45}

46void mul(ll *a,int la,ll *b,int lb,ll *c,int &lc)

60long

long

g()69

intmain()

偽造TCP連線

usr bin python coding utf 8 import optparse from scapy.all import def synflood src,tgt tcp源埠不斷自增一,而目標埠513不變 for sport in range 1024,65535 iplayer ip s...

強簽名偽造

上周五有個朋友問我uac認證那個發布人能不能偽造,我問他偽造這玩意幹啥,他說可以讓釣魚的exe更真實一點。而有簽名的uac是這樣的 顏色都不一樣怎麼騙人!偽造簽名可能很多人第一時間想到的是sigthief.py,我之前一直也是用這個對我木馬進行簽名的,有時候只是單獨用這個偽造乙個微軟簽名也是能過某些...

FFT和Matlab中操作FFT

fft 離散傅氏變換的快速演算法 fft fast fourier transformation 是離散傅氏變換 dft 的快速演算法。即快速傅氏變換。輸入n 1個數,輸出n 1個數 意義不同 輸入是時域,輸出為頻域 輸出是 每個取樣點對應的振幅或者能量值 輸出值的第乙個對應直流分量的振幅,第二個值...