多校第一場 hdu4609 傅利葉變換

2021-06-17 01:15:01 字數 1164 閱讀 2453

題意:隨機從n個數中取3個數構成三角形的概率是多少。

注意到每個數的範圍是1到10^5,可以借鑑生成函式的思想,把任意兩個數的和看作多項式的係數用多項式乘法乘出來。可是一般的乘法的時間很作急,就要用到傅利葉變換了。

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

typedef long long lng;

const int maxn = (1 << 18) + 100;

const double pi = acos(-1.0);

struct fft

void fill(int m, int d, int c)

}void calc(double oper, int c)}}

}void multi()

id = 0; fill(1, 0, 0); calc(1.0, 0);

id = 0; fill(1, 0, 1); calc(1.0, 1);

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

id = 0; fill(1, 0, 2); calc(-1.0, 2);

for(int i = 0; i < len; ++i) p[2][i].first /= len;

}}f;int num[maxn], sum[maxn], n;

lng ans[maxn], len;

void prework()

f.init(len, sum);

f.multi();

for(int i = 0; i < len; ++i) ans[i] = f.p[2][i].first + 0.1;

for(int i = 1; i <= n; ++i) ans[2 * num[i]]--;

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

for(int i = 1; i < len; ++i) sum[i] += sum[i - 1];

}void solve()

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

}printf("%.7f\n", cnt * 1.0 / tot);

}int main()

return 0;

}

hdu 6299 多校第一場

題意 給出一些字串,重新組合,使括號的匹配數量最多 這道題場上沒能出,當時看了一眼,關於括號的,以為是個dp,就沒有再去做這道題。這道題事實上是個貪心,先把已經匹配好的括號數量統計出來。剩下的括號往兩邊堆,右括號往左邊堆,左括號往右邊堆。然後就是排序。左括號比右括號多的這種情況肯定要排在右括號比左括...

HDU6299(2018多校第一場)

bryce1010模板 兩個字串的排序可以分成四種情況 1 str1左少右多 vs str2 左多右少 str2排在str1前面 2 str1 左多右少 vs str2 左少右多 str1排在str2前面 3 str1 左少右多 vs str2 左少右多 按左括號的數量排序 4 其他情況按右括號的數...

2019HDU多校第一場

1002.operation 傳送 題意 給定乙個長度為 n 的數列,m 次操作,每次操作如下 0 l r 查詢區間 l,r 內若干個數的最大異或和。1 x 給數列末尾新增乙個數 x 資料範圍 1 n,m 5e5,1 a i 2 分析 開始直接考慮用線段樹維護區間線性基的並,然後每次查詢求區間線性基...