bzoj 4332:JSOI2012 分零食

  

描述

這里是歡樂的進香河,這里是歡樂的幼兒園。

今天是2月14日,星期二。在這個特殊的日子里,老師帶著同學們歡樂地跳著,笑著。校長從幼兒園旁邊的小吃店買了大量的零食決定分給同學們。聽到這個消息,所有同學都安安靜靜地排好了隊,大家都知道,校長不喜歡調皮的孩子。

同學們依次排成了一列,其中有A位小朋友,有三個共同的歡樂系數O,S和U。如果有一位小朋友得到了x個糖果,那么她的歡樂程度就是f(x)=Ox^2+Sx+U。

現在校長開始分糖果了,一共有M個糖果。有些小朋友可能得不到糖果,對于那些得不到糖果的小朋友來說,歡樂程度就是1。如果一位小朋友得不到糖果,那么在她身后的小朋友們也都得不到糖果。(即這一列得不到糖果的小朋友一定是最后的連續若干位)

所有分糖果的方案都是等概率的。現在問題是:期望情況下,所有小朋友的歡樂程度的乘積是多少?呆呆同學很快就有了一個思路,只要知道總的方案個數T和所有方案下歡樂程度乘積的總和S,就可以得到答案Ans=S/T。現在他已經求出來了T的答案,但是S怎么求呢?他就不知道了。你能告訴他么?

因為答案很大,你只需要告訴他S對P取模后的結果。

后記:

雖然大家都知道,即便知道了T,知道了S對P取模后的結果,也沒有辦法知道期望情況下,所有小朋友歡樂程度的乘積。但是,當呆呆想到這一點的時候,已經徹底絕望了。

格式

輸入格式

第一行有2個整數,分別是M和P。

第二行有一個整數A,第三行有一個整數O。

第四行有一個整數S,第五行有一個整數U。

輸出格式

一個整數S,因為答案可能很大,你只需要輸出S 對P取模后的結果。

?

看到很多大佬虐這道題,我也很好奇就寫了寫。

題里直接給了個生成函數$c$和一個卷積的形式$c^x$,如果題里沒有要求拿到糖的人是一個前綴的話直接令$c[0]=1$求一發多項式快速冪就行了。

但有了限制之后,考慮枚舉得到糖的人數,因為不能有人沒有糖,令$c[0]=0$。

設$f[i]$表示只有i個糖時的答案,最后答案為$f[m]$,則

$$f=\sum_{i=1}^{A}c^i$$

感覺如果模數合適的話應該可以等比數列求和直接做吧。。。開始還以為是一道水題

但顯然這道題不行,那就考慮倍增。

設$g[i]=c^{2^i},sumg[i]=\sum_{i=1}^{2^i}c^i$

把$A$二進制拆分后用上邊兩個數組顯然是可以求出來的,懶得寫了。。。

注意FFT完往回賦值時只賦$0-m$,不要把FFT完的整個數組都賦回去,調了一晚上不知道哪錯了。。。

  1 #include<iostream>
  2 #include<cstdio>
  3 #include<algorithm>
  4 #include<cstring>
  5 #include<cmath>
  6 #define pi acos(-1)
  7 #define N 50005
  8 #define double long double
  9 using namespace std;
 10 struct E
 11 {
 12     double x,y;
 13     E(){;}
 14     E(double _x,double _y)
 15     {
 16         x=_x;y=_y;
 17     }
 18     friend E operator + (E a,E b)
 19     {
 20         return E(a.x+b.x,a.y+b.y);
 21     }
 22     friend E operator - (E a,E b)
 23     {
 24         return E(a.x-b.x,a.y-b.y);
 25     }
 26     friend E operator / (E a,double b)
 27     {
 28         return E(a.x/b,a.y/b);
 29     }
 30     friend E operator * (E a,E b)
 31     {
 32         return E(a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x);
 33     }
 34 }a[N],b[N];
 35 int R[N],n;
 36 void fft(E *a,int f)
 37 {
 38     for(int i=0;i<n;i++)if(i<R[i])swap(a[i],a[R[i]]);
 39     for(int i=1;i<n;i<<=1)
 40     {
 41         E wn(cos(pi/i),f*sin(pi/i));
 42         for(int j=0;j<n;j+=(i<<1))
 43         {
 44             E w(1,0);
 45             for(int k=0;k<i;k++,w=w*wn)
 46             {
 47                 E x=a[j+k],y=w*a[j+k+i];
 48                 a[j+k]=x+y;a[j+k+i]=x-y;
 49             }
 50         }
 51     }
 52     if(f==-1)
 53     {
 54         for(int i=0;i<n;i++)a[i]=a[i]/(double)n;
 55     }
 56     return ;
 57 }
 58 int m,p,A,O,S,U;
 59 int c[N];
 60 int g[15][N],sg[15][N];
 61 void make(int *a1,int *a2,int *a3)
 62 {
 63     for(int i=0;i<n;i++)a[i].x=a[i].y=b[i].x=b[i].y=0;
 64     for(int i=0;i<n;i++)a[i].x+=a2[i];
 65     for(int i=0;i<n;i++)b[i].x+=a3[i];
 66     fft(a,1);fft(b,1);
 67     for(int i=0;i<n;i++)a[i]=a[i]*b[i];
 68     fft(a,-1);
 69     for(int i=0;i<=m;i++)a1[i]=(int)(a[i].x+0.2);
 70     for(int i=0;i<=m;i++)a1[i]%=p;
 71 }
 72 int gg[N];
 73 void solve()
 74 {
 75     for(int i=0;i<n;i++)g[0][i]=c[i];
 76     for(int i=1;i<=13;i++)make(g[i],g[i-1],g[i-1]);
 77     for(int i=0;i<n;i++)sg[0][i]=c[i];
 78     for(int i=1;i<=13;i++)
 79     {
 80         for(int j=0;j<n;j++)sg[i][j]=sg[i-1][j];
 81         make(gg,sg[i-1],g[i-1]);
 82         for(int j=0;j<n;j++)
 83         {
 84             sg[i][j]=sg[i][j]+gg[j];    
 85             if(sg[i][j]>=p)sg[i][j]-=p;
 86         }
 87     }
 88     return ;
 89 }
 90 int ans[N],now[N];
 91 void pw(int y)
 92 {
 93     now[0]=1;
 94     for(int i=13;i>=0;i--)
 95     {
 96         if(y&(1<<i))
 97         {
 98             make(gg,now,sg[i]);
 99             make(now,now,g[i]);
100             for(int j=0;j<n;j++)
101             {
102                 ans[j]=ans[j]+gg[j];
103                 if(ans[j]>=p)ans[j]-=p;
104             }
105         }
106     }
107     return ;
108 }
109 int main()
110 {
111     scanf("%d%d%d%d%d%d",&m,&p,&A,&O,&S,&U);
112     S%=p;O%=p;U%=p;
113     for(int i=1;i<=m;i++)c[i]=(1LL*O*i*i%p+1LL*S*i%p+U)%p;
114     n=1;int l=0;
115     while(n<=2*m)n<<=1,l++;
116     for(int i=0;i<n;i++)R[i]=(R[i>>1]>>1)|((i&1)<<(l-1));
117     if(A>m)A=m;
118     solve();
119     pw(A);
120     printf("%d\n",ans[m]);
121     return 0;
122 }

?

轉載于:https://www.cnblogs.com/ezyzy/p/6618613.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372581.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372581.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372581.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

并發–順序線程和原始線程

我不久前參與了一個項目&#xff0c;該項目的報告流程如下&#xff1a; 用戶會要求舉報 報告要求將被翻譯成較小的部分 每個零件的報告將基于零件/節的類型由報告生成器生成 組成報告的各個部分將重新組合成最終報告&#xff0c;并返回給用戶 我的目標是展示如何從錯誤的實…

借貸期末余額 oracle,應交稅費期末余額分別在借貸方表示什么

應交稅費是負債類科目&#xff0c;有時期末余額會在借方&#xff0c;有時會在貸方。因此&#xff0c;小伙伴們在實際的賬務處理工作中&#xff0c;一定要弄清楚兩者的含義。為了幫助大家進行有更進一步的理解&#xff0c;小編再次匯總了應交稅費期末余額分別在借貸方表示什么的…

Android學習——ListView的緩存機制

在使用ListView的時候&#xff0c;需要加載適配器和數據源&#xff0c;這篇文章主要介紹一下ListView的使用以及利用ListView的緩存機制來減少系統的初始化時間。 ListView的使用 ListView和ViewPager很類似&#xff0c;首先在ArrayList中存放數據源&#xff0c;并把它作為Adap…

C#基礎 特殊集合(棧集合、隊列集合、哈希表集合)

一、 棧: Stank,先進先出&#xff0c;一個一個賦值&#xff0c;一個一個取值&#xff0c;按照順序。 .count 取集合內元素的個數 .push 將元素一個一個推入集合 .pop 將元素一個一個彈出集合 .peek 查看集合中的一個元素 .clear 清空集合 Stack stnew Stack…

OSGi環境中的Servlet基本身份驗證

您首先需要獲得對OSGI HTTP Service的引用。 您可以通過聲明性服務來做到這一點。 這篇文章將集中在獲得對HTTP服務的引用之后的步驟。 注意&#xff1a;此職位的完整課程位于此處 通過OSGI HTTP Service注冊Servlet時&#xff0c;它為您提供了提供HTTPContext實現的選項。 htt…

linux夏令時配置文件,Linux夏令時是怎么調整的?

以法國巴黎為例&#xff1a;root121 zoneinfo]# ln -s /usr/share/zoneinfo/Europe/Paris /etc/localtime[root121 zoneinfo]# date2015年 10月 13日 星期二 03:45:09 CEST[root121 zoneinfo]# date -RTue, 13 Oct 2015 03:45:31 0200[root121 zoneinfo]# zdump -v /etc/localt…

Kali Linux滲透基礎知識整理(二)漏洞掃描

Kali Linux滲透基礎知識整理系列文章回顧 漏洞掃描 網絡流量NmapHping3NessuswhatwebDirBusterjoomscanWPScan網絡流量 網絡流量就是網絡上傳輸的數據量。 TCP協議 TCP是因特網中的傳輸層協議&#xff0c;使用三次握手協議建立連接。當主動方發出SYN連接請求后&#xff0c;等待…

嵌入式軟件設計第09實驗報告

學號&#xff1a;140201133 姓名&#xff1a;李宇昕 組別&#xff1a;第3組 實驗地點&#xff1a;D19 一、實驗目的&#xff1a; 1.熟悉WWW技術中的SSI&#xff08;Server Side Include&#xff09;技術。 2.學會使用SSI技術編寫代碼把當前開發板內…

TeamCity工件:HTTP,Ant,Gradle和Maven

您可以通過幾種方式檢索TeamCity工件&#xff1f; 我說有很多選擇 &#xff01; 如果您使用的是Java構建工具&#xff0c;那么可以使用簡單的HTTP請求&#xff0c;Ant Ivy&#xff0c;Gradle和Maven下載和使用TeamCity構建配置生成的二進制文件。 怎么樣&#xff1f; 繼續閱讀…

linux中hadoop命令大全,hadoop常用命令

啟動Hadoop進入HADOOP_HOME目錄。執行sh bin/start-all.sh關閉Hadoop進入HADOOP_HOME目錄。執行sh bin/stop-all.sh1、查看指定目錄下內容hadoop dfs –ls [文件目錄]eg: hadoop dfs –ls /user/wangkai.pt2、打開某個已存在文件hadoop dfs –cat [file_path]eg:hadoop dfs -ca…

Uber從Postgres切換到MySQL

Uber工程師在官方博客上描述了他們為什么要從 Postgres 切換到 MySQL 數據庫。Uber的早期架構是由 Python編寫的后端應用構成&#xff0c;使用了 Postgres 數據庫。但此后&#xff0c;Uber的架構發生了顯著的改變&#xff0c;轉變到了微服務模型和新的數據平臺。以前他們使用 P…

AutoCAD如何方便截圖放到Word文檔,改成白底黑字

將模型視圖切換到布局2即可 比如下圖所示的效果 先回到模型視圖把所有線條顏色都改成白色&#xff0c;然后添加適當的標注&#xff08;比如要受力分析&#xff0c;則在CAD中繪制箭頭也很方便的&#xff09;&#xff0c;文字說明。然后切換到布局2就OK 可以截圖了。 轉載于:http…

在Hotspot JVM中跟蹤過多的垃圾回收

由于內存泄漏或其他內存問題&#xff0c;經常導致應用程序凍結&#xff0c;僅使垃圾收集器&#xff08;GC&#xff09;進程運行失敗&#xff0c;試圖釋放一些空間。 直到看門狗&#xff08;或沮喪的管理員&#xff09;重新啟動應用程序并且問題從未解決之前&#xff0c;這種情況…

linux 網絡在線升級,linux在線升級

//前提信息&#xff1a;1.系統分區信息SPI-Flash:[0] 0x000000000000-0x000000020000 : "SPL,128KB"[1] 0x000000020000-0x0000000e0000 : "U-Boot,768KB"[2] 0x0000000e0000-0x000000100000 : "U-Boot Env,128KB"[3] 0x000000100000-0x00000020…

XML反序列化出錯,XML 文檔(2, 2)中有錯誤

XML轉換為實體類的錯誤處理方案 一.錯誤描述&#xff1a; XML反序列化出錯&#xff0c;XML 文檔(2, 2)中有錯誤二.解決方案&#xff1a; 在實體類的字段要加上XmlElement屬性三.具體實現: 1.XML文檔 <EVENT_INSTANCE><EventType>ALTER_TABLE</EventType><…

iOS--支付寶環境集成

1.下載支付寶SDK以及Demo https://doc.open.alipay.com/doc2/detail?treeId54&articleId103419&docType1 2.新建文件夾“AliSDK”&#xff0c;將壓縮包內的文件拷貝到該文件夾下&#xff0c;完成后如下圖所示&#xff1a; 3.將文件夾拷貝到項目中&#xff0c; 4.執行完…

再見,再見,5 * 60 * 1000 //五分鐘,再見,再見

在這篇文章中&#xff0c;我將討論一個在1.5版中首次引入的類&#xff0c;我使用了太多&#xff0c;但是與一些人交談&#xff0c;他們說他們不知道它的存在。 此類是TimeUnit 。 TimeUnit類表示給定粒度單位的持續時間&#xff0c;還提供了轉換為不同單位的實用方法以及執行計…

windows如何調用Linux的API,Windows和Native API中的系統調用?

最近&#xff0c;我在* NIX操作系統中使用了很多匯編語言。我想知道Windows域。Linux中的調用約定&#xff1a;mov $SYS_Call_NUM, %eaxmov $param1 , %ebxmov $param2 , %ecxint $0x80而已。這就是我們應該如何在Linux中進行系統調用。linux中所有系統調用的參考&#xff1a;關…

maven生命周期和插件

maven生命周期和插件 生命周期 maven的生命周期有三套&#xff0c;互相獨立。每個生命周期含有不同階段&#xff0c;常用如下 clean 清理項目 pre-clean 執行清理前需要完成的工作clean 清理上一次構建生成的文件post-clean 執行清理后需要完成的工作default 構建項目 validate…

Java EE 6測試第二部分– Arquillian和ShrinkWrap簡介

在Java EE 6測試的第一部分中&#xff0c;我簡要介紹了使用Glassfish嵌入式容器的EJB 3.1 Embeddable API&#xff0c;以演示如何啟動該容器&#xff0c;如何在項目類路徑中查找bean以及運行非常簡單的集成測試。 這篇文章重點介紹Arquillian和ShrinkWrap以及為什么它們是用于企…