C. Random Events
题意:
水题排序。
不知道当时为什么没做出来,我服了。
for (int i = 1; i <= m; i++)
if (num[i] >= st)
temp *= (1.0 - 1.0 * p[i]);
ans = 1 - temp;
重点代码!
代码:
/*
皮卡丘冲鸭!
へ /|
/\7 ∠_/
/ │ / /
│ Z _,< / /`ヽ
│ ヽ / 〉
Y ` / /
? ● ● ??〈 /
() へ | \〈
>? ?_ ィ │ //
/ へ / ?<| \\
ヽ_? (_/ │//
7 |/
>―r ̄ ̄`?―_
*/
#include <iostream>
#include <stdio.h>
#include <cstring>
#include <string>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 7;
int a[maxn], num[maxn];
double p[maxn], y;
int main() {
int T;
cin >> T;
while(T--) {
double ans;
int x;
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++)
cin >> a[i];
for (int i = 1; i <= m; i++) {
cin >> x >> y;
num[i] = x;
p[i] = y;
}
int st = n;
for (int i = n; i >= 1; i--) {
st = i;
if (a[i] != i) break;
}
if (st == 1) {
ans = 1.0;
} else {
double temp = 1.0;
for (int i = 1; i <= m; i++)
if (num[i] >= st)
temp *= (1.0 - 1.0 * p[i]);
ans = 1 - temp;
}
cout << ans << endl;
}
}