[归并][随机算法] 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 想法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python发送邮件以及自动化测试报告的
- 下一篇: Codeforces 558E A Si