bzoj2134 單選錯位

題目

博客要開始更新了。畢竟noip也算過去了。

這差不多又是一道數學題,我們這樣考慮:

對於一道答案有a種情況,會選b種可能的題,兩兩排一下,一共有ab種情況,而符合條件的只有min(a,b)種,那麼,期望爲(1/ab)*min(a,b),也就是1/max(a,b)。

之後就是O(n)累加就好了。

#include<bits/stdc++.h>
#define N 10000000
using namespace std;
int n,A,B,C,a[N+5];
double ans;
int main()
{
    freopen("in.txt","r",stdin);
    scanf("%d%d%d%d%d",&n,&A,&B,&C,a+1); 
    for(int i=2;i<=n;i++)a[i]=((long long)a[i-1]*A+B)%100000001; 
    for(int i=1;i<=n;i++)a[i]=a[i]%C+1;
    a[0]=a[n];
    for(int i=1;i<=n;i++)ans+=(double)1/max(a[i],a[i-1]);
    printf("%.3f",ans);
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章