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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

[归并][随机算法] JZOJ P3765 想法

發布時間:2024/4/17 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [归并][随机算法] JZOJ P3765 想法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Description

小強和阿米巴是好朋友。

小強要出一套題目。他的題目以涉及面廣(偏)、考察深入(怪)、思維強度大(難)著稱。他為了出題,一共攢了M個本質不同的想法,每個想法形成了一個題目。不過,他覺得拿這些題目去考察選手會把比賽搞的太過變態,所以,想請阿米巴來幫忙調整一下他的題目。

阿米巴指出,為了讓一場考試的題目的考察點盡量全面,有一個通用的做法叫做“組合”。如果把兩個題目A和B組合在一起,那么組合而成的題目涉及到的想法的集合就是A涉及到的想法的集合和B涉及到的想法的集合的并。

并且,題目是可以反復組合的。

例如,小強現在有三個想法1,2,3,分別對應了題目P1,P2,P3。

現在,小強把P1和P2組合得到P4。P4涉及的想法的集合是{1,2}。

之后,小強把P2和P3組合得到P5。P5涉及的想法的集合是{2,3}。

最后,小強把P4和P5組合得到P6。P6涉及的想法的集合是{1,2,3}。

現在,小強告訴你每個題目都是如何組合而來的。你要回答的就是,每個題目涉及的想法的集合有多大。

不過,這個問題是很難的。于是,你只需要能夠以比較高的概率回答的比較準確即可。

Input

第一行兩個整數N,M,依次表示小強的題目數量和想法的數量

接下來N-M行,每行兩個整數,依次表示小強組合出來的題目都是由哪兩個題組合而成的。M個想法對應的題目依次編號為1~M。之后,小強組合出來的第一個題編號為M+1,組合出來的第二個題編號為M+2,依次類推。

Output

輸出N-M行,每行一個整數表示小強組合出來的每個題都涉及了幾個想法。

Sample Input

6 3

1 2

2 3

4 5

Sample Output

2

2

3

Data Constraint

對于30%的數據,M≤1000,N≤10000

對于60%的數據,M≤10000,N≤100000

對于100%的數據,M≤100000,N≤1000000

Hint

【評分方法】

對于每個輸出文件,如果其中你有95%以上的行的答案和正確答案的誤差不超過25%,那么你就可以得到分數。所謂誤差不超過25%,即,如果正確答案是X,那么你的答案在[0.8X,1.25X]這個閉區間內。

題解

STM出題人一上來就說,這題是隨機數算法,是一個允許有誤差的SPJ

隨機數大法好!!!(可惜子豪不在)

這題其實就是我們隨機生產m個數,將每個想法用這些值賦值 然后我們再進行歸并

那么怎么歸并

我們可以每次加入!!可以形成它的思想的序號之前歸并的隨機數!! 每次從小到大加入,因為之前合并過的都是按升序的,所以可以將后面一串一樣的bank掉 這樣可以保證每次加進來的就是按升序的沒有重復的序列

怎么求值

如果每次加入的數小于30,則直接累計 如果大于30,則加m*3*T/f[i][T] (雖然我不知到怎么推到的)

引用講題人一句話:

A:那這公式是怎么推出來的?
B:我也不知道
A:那你怎么A的
B:(手指這公式)這里不是有結論嗎/
A:……

最后跑五次,求平均值輸出

代碼

#include<cstdio> #include<iostream> #include<algorithm> using namespace std; int n,m,T,mx,x[1000003],y[1000003],f[1000003][33]; double ans[1000003]; void gb(int *a,int *b,int *c) {int i=1,j=1;c[0]=0;for (int z=1;z<=T&&(i<=a[0]||j<=b[0]);z++){c[0]++;if ((a[i]<b[j]&&i<=a[0])||(j>b[0])) c[z]=a[i++]; else c[z]=b[j++];while (i<=a[0]&&c[z]==a[i]) i++;while (j<=b[0]&&c[z]==b[j]) j++;} } int main() {scanf("%d%d",&n,&m);for (int i=m+1;i<=n;i++) scanf("%d%d",&x[i],&y[i]);T=30;for (int t=1;t<=5;t++){mx=3*m;for (int i=1;i<=m;i++) f[i][1]=rand()%mx+1,f[i][0]=1;for (int i=m+1;i<=n;i++){gb(f[x[i]],f[y[i]],f[i]);if (f[i][0]<T) ans[i]+=f[i][0]; else ans[i]+=mx*T/f[i][T];}}for (int i=m+1;i<=n;i++) printf("%.0lf\n",ans[i]/5);return 0; }

轉載于:https://www.cnblogs.com/Comfortable/p/8412225.html

總結

以上是生活随笔為你收集整理的[归并][随机算法] JZOJ P3765 想法的全部內容,希望文章能夠幫你解決所遇到的問題。

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