【解题报告】Codeforces Round #301 (Div. 2) 之ABCD
A. Combination Lock
拨密码。。最少次数。。密码最多有1000位。
用字符串存起来,然后每位大的减小的和小的+10减大的,再取较小值加起来就可以了。。。
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<stack>
#define FOR(i,n) for(i=0;i<(n);i++)
#define CLR(a) memset(a,0,sizeof(a))
#define CIN(a) scanf("%d",&a)
typedef long long ll;
using namespace std;
char s1[],s2[];
int main()
{
int n,ans=,i;
scanf("%d",&n);
scanf("%s%s",s1,s2);
for(i=;i<n;i++)
{
ans+=min(max(s2[i],s1[i])-min(s1[i],s2[i]),min(s2[i],s1[i])+-max(s1[i],s2[i]));
}
printf("%d\n",ans);
return ;
}
B. School Marks
给定一个数字序列,长度是n,已知其中的前k个数字,求其他数字,满足每个数字最大是p,数字的总和不超过x,这些数的中位数不小于y。
直接贪心即可。
要满足中位数不小于y即必须满足不超过n/2个数小于y。
先统计已知的数中小于y的数的个数,如果已经有超过n/2个就直接NO了。
如果没有n/2个数的话就一直往里面添加1(因为保证和最小)直到刚好是N/2个,然后往里面添加y直到达到n个数。
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<stack>
#define FOR(i,n) for(i=0;i<(n);i++)
#define CLR(a) memset(a,0,sizeof(a))
#define CIN(a) scanf("%d",&a)
typedef long long ll;
using namespace std;
int main()
{
int i,n,k,p,x,y,z,s=,xiao=;
scanf("%d%d%d%d%d",&n,&k,&p,&x,&y);
for(i=;i<k;i++)
{
scanf("%d",&z);
s+=z;
if(z<y) xiao++;
}
//printf("sum=%d xiao=%d\n",s,xiao);
int num=;
int ans[];
for(i=k;i<n;i++)
{
if(xiao<n/)
{
ans[num++]=;
s+=;
xiao++;
}
else if(xiao==n/)
{
ans[num++]=y;
s+=y;
}
else {num=-;break;}
}
if(s<=x&&num!=-)
{
for(i=;i<num;i++)
{
if(i!=) printf(" ");
printf("%d",ans[i]);
}
printf("\n");
}
else printf("-1\n");
return ;
}
C. Ice Cave
图中X表示碎冰,点表示完整的冰,每次走过完整的冰时,这块冰就会变成碎冰。走过碎冰之后就会掉下去。。。
给定初始点和目标点,最终要从目标点掉下去。不能原地跳。。。而且初始点一定是X。
直接DFS一遍整张图就可以了。。。走过的点标记为X,没必要回溯。
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<stack>
#define FOR(i,n) for(i=0;i<(n);i++)
#define CLR(a) memset(a,0,sizeof(a))
#define CIN(a) scanf("%d",&a)
typedef long long ll;
using namespace std;
char M[][];
int x,y,x2,y2;
int n,m;
int dfs(int x,int y)
{
if(x>=n||x<||y>=m||y<) return ;
if(M[x][y]=='X'&&x==x2-&&y==y2-) return ;
if(M[x][y]=='X') return ;
if(M[x][y]=='.') M[x][y]='X';
if(dfs(x-,y))return ;
if(dfs(x+,y))return ;
if(dfs(x,y-))return ;
if(dfs(x,y+))return ;
return ;
}
int main()
{
int i;
scanf("%d%d",&n,&m);
for(i=;i<n;i++)
{
scanf("%s",M[i]);
}
scanf("%d%d",&x,&y);
scanf("%d%d",&x2,&y2);
M[x-][y-]='.';
if(dfs(x-,y-)){printf("YES\n");}
else printf("NO\n"); return ;
}
D. Bad Luck Island
有r个石头,s个剪刀,p个布。他们之间随机相遇,如果石头碰见了剪刀,石头就会把剪刀干掉。剪刀碰见布,就会把布干掉。。布碰见石头的话,也会把石头干掉。每一对相遇的概率是相同的,求他们三种最终活下来的概率。
概率DP。。
任意状态(r,s,p)可以变成三种状态(r-1,s,p)、(r,s-1,p)、(r,s,p-1)。
对于状态(a,b,c) 有p(a,b,c)=(a/sum)*(b/(sum-1))+(b/sum)*(a/(sum-1))的概率是a和b相遇(sum=a+b+c)。
即可求出任意状态转换成以上三种状态的概率。
然后状态转移方程就是:
dp{a,b,c} =
p(c,a,b)/sump * dp{a-1,b,c}
+p(a,b,c)/sump * dp{a,b-1,c}
+p(b,c,a)/sump * dp{a,b,c-1}
其中sump =p(a,b,c)+p(b,c,a)+p(c,a,b)
结束。。。
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<stack>
#define FOR(i,n) for(i=0;i<(n);i++)
#define CLR(a) memset(a,0,sizeof(a))
#define CIN(a) scanf("%d",&a)
typedef long long ll;
using namespace std;
double dp[][][][];
double p(int a,int b,int c)
{
int sum=a+b+c;
return (1.0*a/sum)*(1.0*b/(sum-))+(1.0*b/sum)*(1.0*a/(sum-));
}
double DP(int i,int j,int k,int z)
{
if(i==&&j==) return z==;
if(i==&&k==) return z==;
if(k==&&j==) return z==;
if(i==) return z==;
if(j==) return z==;
if(k==) return z==;
if(z==) return -dp[i][j][k][]-dp[i][j][k][];
return dp[i][j][k][z];
}
int main()
{
int a,b,c,i,j,k;
scanf("%d%d%d",&a,&b,&c);
for(i=;i<=a;i++)
for(j=;j<=b;j++)
for(k=;k<=c;k++)
{
double sump=p(i,j,k)+p(j,k,i)+p(k,i,j);
//printf("sump=%lf\n",sump);
dp[i][j][k][]=;
dp[i][j][k][]+=p(k,i,j)/sump*DP(i-,j,k,);
dp[i][j][k][]+=p(i,j,k)/sump*DP(i,j-,k,);
dp[i][j][k][]+=p(j,k,i)/sump*DP(i,j,k-,); dp[i][j][k][]=;
dp[i][j][k][]+=p(k,i,j)/sump*DP(i-,j,k,);
dp[i][j][k][]+=p(i,j,k)/sump*DP(i,j-,k,);
dp[i][j][k][]+=p(j,k,i)/sump*DP(i,j,k-,);
}
printf("%.12lf %.12lf %.12lf\n",DP(a,b,c,),DP(a,b,c,),DP(a,b,c,));
return ;
}
【解题报告】Codeforces Round #301 (Div. 2) 之ABCD的更多相关文章
- DFS/BFS Codeforces Round #301 (Div. 2) C. Ice Cave
题目传送门 /* 题意:告诉起点终点,踩一次, '.'变成'X',再踩一次,冰块破碎,问是否能使终点冰破碎 DFS:如题解所说,分三种情况:1. 如果两点重合,只要往外走一步再走回来就行了:2. 若两 ...
- 贪心 Codeforces Round #301 (Div. 2) B. School Marks
题目传送门 /* 贪心:首先要注意,y是中位数的要求:先把其他的都设置为1,那么最多有(n-1)/2个比y小的,cnt记录比y小的个数 num1是输出的1的个数,numy是除此之外的数都为y,此时的n ...
- 贪心 Codeforces Round #301 (Div. 2) A. Combination Lock
题目传送门 /* 贪心水题:累加到目标数字的距离,两头找取最小值 */ #include <cstdio> #include <iostream> #include <a ...
- Codeforces Round #301 (Div. 2)(A,【模拟】B,【贪心构造】C,【DFS】)
A. Combination Lock time limit per test:2 seconds memory limit per test:256 megabytes input:standard ...
- Codeforces Round #301 (Div. 2) D. Bad Luck Island 概率DP
D. Bad Luck Island Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/540/pr ...
- Codeforces Round #301 (Div. 2) C. Ice Cave BFS
C. Ice Cave Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/540/problem/C ...
- Codeforces Round #301 (Div. 2) B. School Marks 构造/贪心
B. School Marks Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/540/probl ...
- Codeforces Round #301 (Div. 2) A. Combination Lock 暴力
A. Combination Lock Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/540/p ...
- 「日常训练」Bad Luck Island(Codeforces Round 301 Div.2 D)
题意与分析(CodeForces 540D) 是一道概率dp题. 不过我没把它当dp做... 我就是凭着概率的直觉写的,还好这题不算难. 这题的重点在于考虑概率:他们喜相逢的概率是多少?考虑超几何分布 ...
随机推荐
- 使用阿里云ECS安装HDFS的小问题
毕设涉及HDFS,理论看的感觉差不多了,想搭起来测试一下性能来验证以便进行开题报告,万万没想到装HDFS花费了许多天,踩了许多坑,记录一下. 背景:使用两台阿里云学生机ECS,分处不同账号不同区域,一 ...
- IE与DOM的事件监听
IE 事件监听 标准DOM不支持 注意几点: window.onload attachEvent detachEvent 标准DOM监听,ie不支持
- java工具类使用
ResourceBundle bundle = ResourceBundle.getBundle("res", new Locale("zh", "C ...
- 【平台中间件】Nginx安装配置,实现版本更新不影响服务访问
为什么要做负载均衡? 当你网站是一个企业站.个人博客的时候,或者访问量比较小的时候,一台服务器完全应付的了,那就完全没必要做负载均衡.但是,如果你的网站是平台级别,用户达到十万百万级别了,一台服务器明 ...
- [javascript]jQuery绑定事件方法:on()
语法: $(selector).on(event,childSelector,data,function) on(event,childSelector,data,function):在被选元素及子元 ...
- IdentityServer4在Asp.Net Core中的应用(一)
IdentityServer4是一套身份授权以及访问控制的解决方案,专注于帮助使用.Net 技术的公司为现代应用程序建立标识和访问控制解决方案,包括单点登录.身份管理.授权和API安全. 下面我将具体 ...
- 【Demo】jQuery 轮播图简单动画效果
功能实现: (1)设定图片称号的鼠标悬停事件: (2)在事件中利用自定义动画函数调整显示图片,并修改对应标号样式: (3)为图片显示区域设定鼠标悬停事件: (4)当鼠标停在该区域时,清除图片切换动画定 ...
- Codeforces Round #400
最近好像总是有点不想打,专题也刷不动,还是坚持这做了一场,虽然打到一半就没打了...(反正通常都只能做出两题) 感觉自己切水题越来越熟练了,然而难题还是不会做.. A题,水,用vector存下来就行了 ...
- Windows下查看占用端口程序
配置shadowsocks,发现本地1080端口被占用,当然更改没有占用的端口即可.当然还得查找下什么程序占用的.无奈,看了下115浏览器占用此端口,浏览器不能管啊,你懂得!!! Windows查找下 ...
- 练习-99乘法表 token生成器 翻译小工具
一.99乘法表 1.1 技术点 记住: for 循环的使用,以及for的嵌套使用 range()的使用,掌握sep为负数的使用的使用. print() 函数的使用,默认的结尾的换行符 替换 end= ...