zoukankan      html  css  js  c++  java
  • BZOJ2134: 单选错位

    2134: 单选错位

    Time Limit: 10 Sec  Memory Limit: 259 MB
    Submit: 1003  Solved: 773
    [Submit][Status][Discuss]

    Description

    Input

    n很大,为了避免读入耗时太多,输入文件只有5个整数参数n, A, B, C, a1,由上交的程序产生数列a。下面给出pascal/C/C++的读入语句和产生序列的语句(默认从标准输入读入): // for pascal readln(n,A,B,C,q[1]); for i:=2 to n do q[i] := (int64(q[i-1]) * A + B) mod 100000001; for i:=1 to n do q[i] := q[i] mod C + 1; // for C/C++ 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; 选手可以通过以上的程序语句得到n和数列a(a的元素类型是32位整数),n和a的含义见题目描述。

    Output

    输出一个实数,表示gx期望做对的题目个数,保留三位小数。

    Sample Input

    3 2 0 4 1

    Sample Output

    1.167

    思路{

      简单的期望$DP$裸题。

      首先发现相邻的点答案正确的唯一情况就是$a_i=a_{i+1}$。

      那么概率是$P=dfrac{min(a_i,a_{i+1})}{a_i*a_{i+1}}=dfrac{1}{max(a_i,a_{i+1})}$。

      由于任意相邻的情况不相互影响,满足期望的线性性质,直接累加过去就可以了。

    }

    #include<bits/stdc++.h>
    #define LL long long
    #define RG register
    #define il inline
    #define N 10000010
    #define db double
    using namespace std;
    int a[N],A,B,C,n;
    int main(){
      scanf("%d%d%d%d%d",&n,&A,&B,&C,a+1);
      for (RG int i=2;i<=n;i++)
        a[i] = ((long long)a[i-1] * A + B) % 100000001;
      a[1]=a[1]%C+1;
      db ans=0;
      for(int i=2;i<=n;i++){
        a[i]=a[i]%C+1;
        ans+=1.0/(max(a[i],a[i-1]));
      }ans+=1.0/(max(a[n],a[1]));
      printf("%.3lf",ans);
    }
    
  • 相关阅读:
    Java通过反射加载的类,变量无法注入
    jmeter http并发测试时报错
    spring 自定义注解
    cmd 和powershell 用git 显示乱码
    centos6.8上安装部署 jhipster-registry
    tcpdf最新版 6.2版
    微信Oauth2.0鉴权 40029 问题
    微信支付学习记录1
    win10 localhost 解析为 ipv6地址 ::1 的解决办法
    PHPExcel 导出时乱码
  • 原文地址:https://www.cnblogs.com/zzmmm/p/7784780.html
Copyright © 2011-2022 走看看