牛客寒假训练营2-C算概率
2024-09-06 21:07:31
思路
用 f(i,j) 来表示当前做了i道题,共做对了j道题
状态 f[i][j] = f[i-1][j] * (1-p[i]) + f[i-1][j-1] * p[i]
第一种:由于i-1时对了j题,所以第i题做错了;
第二种:由于i-1时对了j-1题,所以第i题对了;
时间复杂度O(n^2)
CODE
#include <bits/stdc++.h>
#define dbg(x) cout << #x << "=" << x << endl using namespace std;
typedef long long LL; template<class T>inline void read(T &res)
{
char c;T flag=;
while((c=getchar())<''||c>'')if(c=='-')flag=-;res=c-'';
while((c=getchar())>=''&&c<='')res=res*+c-'';res*=flag;
} namespace _buff {
const size_t BUFF = << ;
char ibuf[BUFF], *ib = ibuf, *ie = ibuf;
char getc() {
if (ib == ie) {
ib = ibuf;
ie = ibuf + fread(ibuf, , BUFF, stdin);
}
return ib == ie ? - : *ib++;
}
} int qread() {
using namespace _buff;
int ret = ;
bool pos = true;
char c = getc();
for (; (c < '' || c > '') && c != '-'; c = getc()) {
assert(~c);
}
if (c == '-') {
pos = false;
c = getc();
}
for (; c >= '' && c <= ''; c = getc()) {
ret = (ret << ) + (ret << ) + (c ^ );
}
return pos ? ret : -ret;
} const int kmaxn = ;
LL f[kmaxn][kmaxn];
const LL mod = 1e9 + ;
int n;
LL p[kmaxn]; int main()
{
scanf("%d",&n);
for(int i = ; i <= n; ++i) {
scanf("%lld",&p[i]);
}
f[][] = ;
for(int i = ; i <= n; ++i) {
f[i][] = f[i-][] * (mod+-p[i]) % mod;
for(int j = ; j <= n; ++j) {
f[i][j] = ((f[i-][j]*(i-p[i]+mod)) % mod + f[i-][j-]*(mod+p[i]) % mod)% mod;
}
}
for(int i = ; i < n; ++i) {
printf("%lld ",f[n][i]);
}
printf("%lld\n",f[n][n]);
return ;
}
最新文章
- Swift 2.0 异常处理
- android 解析XML 工具类
- 【jq】c#零基础学习之路(3)继承和虚方法
- PHP代码规范
- FireFox下上传控件的显示问题
- QAction QActionGroup QMenu 使用方法
- iOS 面试题
- archlinux下wifi-menu显示连接超时
- 如何使用NSOperations和NSOperationQueues(二)
- RSA 加解密
- iframe 处理
- JVM基础和调优(二)
- PHP ReflectionClass
- 阿里云LINUX服务器配置HTTPS(NGINX)
- RabbitMQ安装配置和基于EasyNetQ驱动的基础使用
- Web应用程序的敏感信息-隐藏目录和文件
- JavaScript 之默认行为 DOM2级,事件委托机制
- Jhipster Registry(Eureka Server) Docker双向联通与高可用部署
- Fiddler 断点功能
- zabbix安装及简单配置