zoukankan      html  css  js  c++  java
  • Codeforces Round #689 (Div. 2, based on Zed Code Competition)C. Random Events(思维)

    题意

    给你一个长度为n的乱序数组,再给你m次操作每次操作包含r和p分别表示可以按升序排序前r位且使用这个的概率为p,问你这些任意用后能够使数组变为升序的概率为多少(每次使用操作都是对原数组进行操作)

    思路

    反向思考,然后1减去不能变为的即可。

    为了能够让一个操作使原数组变得有序那么必须让r大于原数组最后一位乱序的下标。

    #include<bits/stdc++.h>
    using namespace std;
    const int N = 2e5 + 100;
    typedef long long LL;
    //#define int long long 
    int a[N];
    void solve() {
    	int n, m; scanf("%d%d", &n, &m);
    	int idx = n + 1;
    	for (int i = 1; i <= n; ++i) {
    		scanf("%d", &a[i]);
    		if (i != a[i]) {
    			idx = i;
    		}
    	}
    	double ans = 1;
    	while (m--) {
    		int r;
    		double p;scanf("%d%lf", &r, &p);
    		if (r >= idx) ans *= (1 - p);
    	}
    	if (idx == n + 1) {
    		printf("1.000000
    ");
    		return ;
    	}
    	printf("%.10f
    ", 1 - ans);
    }
    signed main() {
    	int T = 1;
    	scanf("%d", &T);
    	while (T--) {
    		solve();
    	}
     
    }
    
  • 相关阅读:
    DHCP DHCPv6
    DHCPv6协议
    IPv6邻居发现协议
    CentOS下禁止防火墙
    centOS下更新yum源
    centOS下yum报错
    Flink+Kafka整合的实例
    Flink基本概念
    Ubuntu16.04下配置ssh免密登录
    Zookeeper+Kafka的单节点配置
  • 原文地址:https://www.cnblogs.com/waryan/p/14295741.html
Copyright © 2011-2022 走看看