首页 > 技术文章 > C. Random Events

pureayu 2020-12-17 22:23 原文

C. Random Events

起初看了好久没看懂,后来才知道什么意思,就是找一下规律,然后统计一下值。

有两个公式可以推出来。

#include <cstdio>
using namespace std;

const int N = 100010;
int a[N];
/*
1
4 3
4 3 2 1
1 0.3
3 1
4 0.6
*/ 

void solve(){
    int n, m, pos = 0;
    scanf("%d%d", &n, &m);
    for(int i = 1; i <= n; i ++){
        scanf("%d", &a[i]);
        if(a[i] != i)
            pos = i;
    }
    double ans = 1;
    double posbility;
    for(int i = 1; i <= m; i ++){
        int value;
        
        scanf("%d%lf", &value, &posbility);
        if(value >= pos)
            ans *= (1 - posbility);
    }
    if(pos == 0)
        printf("1.000000\n");
    else
        printf("%.6lf\n", 1 - ans);
    return;
}


//ans += (1 - ans) * p
//这是另一个公式


int main(){
    int t;
    scanf("%d", &t);
    while(t --){
        solve();
    }
    
    
    return 0;
} 

 

推荐阅读