专栏文章
题解:CF1461C Random Events
CF1461C题解参与者 2已保存评论 1
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mipji5dh
- 此快照首次捕获于
- 2025/12/03 13:01 3 个月前
- 此快照最后确认于
- 2025/12/03 13:01 3 个月前
题目告诉我们有一个序列 ,那么这个 就可以分为两个部分。
第一个部分: ~ ,这个区间内至少有一个元素排列后位置不一样。
第二个部分: ~ ,这个区间内所有的数字有序排列后对应的数字位置不变。
明显,只用当 的情况下进行排列才可以让 变得有序。
对于答案,考虑求出所有操作排列都不有序的概率 ,那么答案就是 。
特别的:对于序列本来就有序的情况,那么答案就是 。
code:
CPP#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;
}
相关推荐
评论
共 1 条评论,欢迎与作者交流。
正在加载评论...