寒假训练3解题报告 CodeForces #148
CodeForces 148B
一道简单模拟,判断龙能够抓到公主几次,如果公主和龙同时到达公主的城堡,不算龙抓住她,因为路程除以速度可能会产生浮点数,所以这里考虑一下精度问题
#include <iostream>
#include <cstdio>
#include <cstring>
#include <iomanip>
#include <algorithm>
using namespace std;
#define eps 1e-19 int ok(int x)
{
if(abs(x)<=eps) return ;
else return x>?:-;
} int main()
{
// freopen("a.in" , "r", stdin);
double vp , vd , t , f , c;
while(~scanf("%lf%lf%lf%lf%lf", &vp , &vd , &t , &f , &c))
{
if(ok(vp-vd) >= ){
puts("");
continue;
}
double del = t*vp;
double cur = del;
int ans = ;
double t1 , t2;//t1princess从dragon在cave时到达目的地要的时间,t2表示dragon从cave追上princess要的时间
t1 = (c-cur)/vp , t2 = (del)/(vd-vp);
while(ok(t1-t2) > ){
cur += t2*vp;
cur = cur+(cur/vd+f)*vp;
del = cur;
t1 = (c-cur)/vp , t2 = (del)/(vd-vp);
ans++;
}
printf("%d\n" , ans);
}
return ;
}
CodeForces 148C
得到a个数,这些数都比先前的数大但不能比前面所有数的和大,得到b个数这些数都比前面的所有数大
这道题自己写的有点坑,太长了,但其实没那么麻烦
那个Wow成立,说明当前数大于前面所有数的和,我们为了使数尽可能小,所以总是将Wow成立的数放前面,Oh成立的数方面,最后多余的数都和前一个数一样即可
当 a+b+1 = n b=0,a>0时是不成立的,因为第二个数开始就必须比前一个数大,那么第二个数比前面的大,也就是大于前面的总和,必然得到的是Wow,与b=0矛盾
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int num[]; int main()
{
// freopen("a.in" , "r", stdin);
int n,a,b,sum;
while(~scanf("%d%d%d" , &n , &a , &b))
{
int flag = ; if(a+b+ == n){
num[] = , sum = ;
if(b == && a>) flag = ;
for(int i= ; i<=+b ; i++)
{
num[i] = sum+ , sum += num[i];
if(num[i]>=){
flag=;
break;
}
}
for(int i=+b ; i<=n ; i++){
num[i] = num[i-]+ , sum += num[i];
if(num[i]>=){
flag=;
break;
}
} }
else{
sum = ;
num[] = , sum = ;
if(b>){
for(int i= ; i<=+b ; i++)
{
num[i] = sum+ , sum+=num[i];
if(num[i]>=){
flag=;
break;
}
}
for(int i=+b ; i<=+a+b ; i++)
{
num[i] = num[i-]+;
if(num[i]>=){
flag=;
break;
}
}
for(int i=+a+b ; i<=n ; i++)
num[i] = num[i-];
}
else{
for(int i= ; i<=n-a ; i++)
num[i] = ;
for(int i=n-a+ ; i<=n ; i++)
num[i] = num[i-]+;
}
}
if(!flag){
puts("-1");
continue;
}
for(int i= ; i<=n ; i++){
if(i==) printf("%d" , num[i]);
else printf(" %d" , num[i]);
}
puts("");
}
return ;
}
Codeforces 148D
简单的概率dp过程
用dp[0][w][b]表示后取完后游戏还未结束得到w只老鼠,b只黑鼠的概率
用dp[1][w][b]表示龙取完后游戏还未结束得到w只白鼠,b只黑鼠的概率
最后答案就是所有龙取完后游戏未结束的局面*一个后取到白鼠的概率
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int N = ;
double dp[][N][N]; int main()
{
// freopen("a.in" , "r", stdin);
int w , b;
while(~scanf("%d%d" , &w , &b))
{
memset(dp , , sizeof(dp));
dp[][w][b] = 1.0;
for(int i=w ; i>= ; i--){
for(int j=b ; j>= ; j--){
dp[][i][j] += dp[][i][j+]*(j+)/(i+j+);
dp[][i][j] += dp[][i][j+]*(j+)/(i+j+)*(j+)/(i+j+) + dp[][i+][j+]*(j+)/(i+j+)*(i+)/(i+j+);
}
}
double ans = ;
for(int i= ; i<=w ; i++)
for(int j= ; j<=b ; j++){
ans += dp[][i][j]*i/(i+j);
}
printf("%.10f\n" , ans);
}
return ;
}
codeforces 148E
每行书都是跟其他行没有直接关系的,求出每行书取得的个数达到的最大值
然后将n行结合在一起当成背包问题看
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int N = ;
int dp[N][N][N] , val[N][N] , sum[N][N];
int maxn[N][N] , cnt[N];
int bag[N][N*N]; int main()
{
// freopen("a.in" , "r" , stdin);
int n,m;
while(scanf("%d%d" , &n , &m) != EOF)
{
memset(dp , , sizeof(dp));
memset(maxn , , sizeof(maxn));
memset(sum , , sizeof(sum));
for(int i= ; i<=n ;i++){
scanf("%d" , &cnt[i]);
for(int j= ; j<=cnt[i] ; j++){
scanf("%d" , &val[i][j]);
sum[i][j] = sum[i][j-]+val[i][j];
for(int k= ; k<=cnt[i] ; k++){
for(int l= ; l<=k+ ; l++){
maxn[i][k] = max(maxn[i][k] , sum[i][cnt[i]]-sum[i][l+cnt[i]-k-] + sum[i][l-]);
}
}
}
}
memset(bag , , sizeof(bag));
for(int i= ; i<=n ; i++){
for(int k= ; k<=cnt[i] ; k++){
for(int j= ; j<=m ; j++){
bag[i][j] = max(bag[i][j] , bag[i-][j]);
if(j>=k)
bag[i][j] = max(bag[i][j] , bag[i-][j-k]+maxn[i][k]);
}
}
}
printf("%d\n" , bag[n][m]);
}
return ;
}
寒假训练3解题报告 CodeForces #148的更多相关文章
- ZOJ Monthly, January 2018 训练部分解题报告
A是水题,此处略去题解 B - PreSuffix ZOJ - 3995 (fail树+LCA) 给定多个字符串,每次询问查询两个字符串的一个后缀,该后缀必须是所有字符串中某个字符串的前缀,问该后缀最 ...
- cf1189解题报告
cf1189div2解题报告 codeforces A 答案要不是一串要不就是去掉最后一个字母的两串 #include <bits/stdc++.h> #define ll long lo ...
- codeforces 476C.Dreamoon and Sums 解题报告
题目链接:http://codeforces.com/problemset/problem/476/C 题目意思:给出两个数:a 和 b,要求算出 (x/b) / (x%b) == k,其中 k 的取 ...
- Codeforces Round #378 (Div. 2) D题(data structure)解题报告
题目地址 先简单的总结一下这次CF,前两道题非常的水,可是第一题又是因为自己想的不够周到而被Hack了一次(或许也应该感谢这个hack我的人,使我没有最后在赛后测试中WA).做到C题时看到题目情况非常 ...
- [置顶] 刘汝佳《训练指南》动态规划::Beginner (25题)解题报告汇总
本文出自 http://blog.csdn.net/shuangde800 刘汝佳<算法竞赛入门经典-训练指南>的动态规划部分的习题Beginner 打开 这个专题一共有25题,刷完 ...
- Codeforces Round 665 赛后解题报告(暂A-D)
Codeforces Round 665 赛后解题报告 A. Distance and Axis 我们设 \(B\) 点 坐标为 \(x(x\leq n)\).由题意我们知道 \[\mid(n-x)- ...
- Codeforces Round 662 赛后解题报告(A-E2)
Codeforces Round 662 赛后解题报告 梦幻开局到1400+的悲惨故事 A. Rainbow Dash, Fluttershy and Chess Coloring 这个题很简单,我们 ...
- Codeforces Educational Round 92 赛后解题报告(A-G)
Codeforces Educational Round 92 赛后解题报告 惨 huayucaiji 惨 A. LCM Problem 赛前:A题嘛,总归简单的咯 赛后:A题这种**题居然想了20m ...
- Codeforces Round #382 (Div. 2) 解题报告
CF一如既往在深夜举行,我也一如既往在周三上午的C++课上进行了virtual participation.这次div2的题目除了E题都水的一塌糊涂,参赛时的E题最后也没有几个参赛者AC,排名又成为了 ...
随机推荐
- TCP协议三次握手和四次握手
前言 先说一下IP协议和TCP协议,IP协议是无连接的通信协议,IP不会占用两个设备之间通信的线路,IP实际上主要负责将每个数据包路由至目的地,但是IP协议并没有能够确保数据包是否到达,传过去的数据包 ...
- Oracle Mysql的jdbc连接
Oracle和MySql的jdbc或连接池中的连接,写下来以便随时参考 Oracle: driverClassName=oracle.jdbc.driver.OracleDriver url=jdbc ...
- 学习笔记 第八章 使用CSS美化列表
第8章 使用CSS美化列表 8.1 列表的基本结构 在HTML中,列表结构可以分为两种基本类型:有序列表和无序列表.使用标签如下: <ul>...</ul>:标识无序列表: ...
- Android开发中使用代码删除数据库
更多信息参考:Android开发中使用代码删除数据库 在Android开发中,如果用到数据库,就会有一个很麻烦的问题,就是有时候需要删除数据库很麻烦,要打开Android Device Monitor ...
- php查询快递信息
$code = 'shunfeng'; $invoice = '952255884068'; $test = getExpressDelivery($code,$invoice); function ...
- $("[lay-id='"+this.id+"']")
$("[lay-id='"+this.id+"']") $("[lay-id='"+this.id+"'] .layui-tabl ...
- bat copy
@echo off regedit /s %~dp0regedit.reg //注册注册表xcopy "D: ...
- Maven常用仓库地址以及手动添加jar包到仓库
http://www.blogjava.net/fancydeepin 共有的仓库 http://repository.sonatype.org/content/groups/public/http: ...
- C# html table转excel
1. protected void ebtDC_Click(object sender, EventArgs e) { string elxStr = "<table><t ...
- Android突破64K限制
1.添加依赖 android{ defaultConfig{ ... multiDexEnabled true ... } } dependencies{ compile 'com.android.s ...