题解:CF1461C Random Events
a_small_penguin · · 题解
题目告诉我们有一个序列
第一个部分:
第二个部分:
明显,只用当
对于答案,考虑求出所有操作排列都不有序的概率
特别的:对于序列本来就有序的情况,那么答案就是
code:
#include <bits/stdc++.h>
using namespace std;
int n, m, k;
int a[100009];
long double ans;
inline void sovel() {
cin >> n >> m;
ans = 1;
k = n + 1;
for(int i = 1; i <= n; i++) {
cin >> a[i];
}
while(a[k - 1] == k - 1 && k - 1 >= 1) k--;
k--;
while(m--) {
int r;
long double p;
cin >> r >> p;
if(r >= k) {
ans *= (1 - p);
}
}
if(k == 0)
cout << 1 << "\n";
else
cout << 1 - ans << "\n";
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int _T = 1;
cin >> _T;
while(_T--) {
sovel();
}
return 0;
}