bestcoder Round #7 前三题题解
BestCoder Round #7
Contest Type : Register Public Contest Status : Ended
Current Server Time : 2014-08-31 21:12:12
| Solved | Pro.ID | Title | Ratio(Accepted / Submitted) |
|---|---|---|---|
![]() |
1001 | Little Pony and Permutation | 37.91%(348/918) |
![]() |
1002 | Little Pony and Alohomora Part I | 29.86%(132/442) |
| 1003 | Little Pony and Dice | 20.00%(8/40) | |
| 1004 | Little Pony and Boast Busters | 4.41%(3/68) |
![]() |
hdu4985 | Little Pony and Permutation | 73.23%(93/127) |
![]() |
hdu4986 | Little Pony and Alohomora Part I | 61.11%(88/144) |
![]() |
hdu4987 | Little Pony and Dice | 23.53%(36/153) |
| hdu4988 | Little Pony and Boast Busters | 80.00%(16/20) |
1001( hdu4985 Little Pony and Permutation ):
题意:给出一些那样的映射,把每个环放到括号里输出。
题解:直接搞,超水,看代码:
代码:
//#pragma comment(linker, "/STACK:102400000,102400000")
#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<set>
#include<stack>
#include<queue>
using namespace std;
#define ll long long
#define usll unsigned ll
#define mz(array) memset(array, 0, sizeof(array))
#define minf(array) memset(array, 0x3f, sizeof(array))
#define REP(i,n) for(i=0;i<(n);i++)
#define FOR(i,x,n) for(i=(x);i<=(n);i++)
#define RD(x) scanf("%d",&x)
#define RD2(x,y) scanf("%d%d",&x,&y)
#define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define WN(x) printf("%d\n",x);
#define RE freopen("D.in","r",stdin)
#define WE freopen("1biao.out","w",stdout)
#define mp make_pair
#define pb push_back
const int maxn=;
int n;
int a[maxn];
int b[maxn];
int main() {
int i,j;
while(scanf("%d",&n)!=EOF) {
FOR(i,,n)scanf("%d",&a[i]);
mz(b);
FOR(i,,n) {
if(!b[i]) {
printf("(%d",i);
j=a[i];
while(j!=i) {
printf(" %d",j);
b[j]=;
j=a[j];
}
putchar(')');
} }
puts("");
}
return ;
}
(有人说用递归会爆栈,太萎了,看我的碉递归版:
//#pragma comment(linker, "/STACK:102400000,102400000")
#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<set>
#include<stack>
#include<queue>
using namespace std;
#define ll long long
#define usll unsigned ll
#define mz(array) memset(array, 0, sizeof(array))
#define minf(array) memset(array, 0x3f, sizeof(array))
#define REP(i,n) for(i=0;i<(n);i++)
#define FOR(i,x,n) for(i=(x);i<=(n);i++)
#define RD(x) scanf("%d",&x)
#define RD2(x,y) scanf("%d%d",&x,&y)
#define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define WN(x) printf("%d\n",x);
#define RE freopen("D.in","r",stdin)
#define WE freopen("1biao.out","w",stdout)
#define mp make_pair
#define pb push_back
const int maxn=;
int n;
int a[maxn];
int b[maxn];
int i,j; void dg(const int &x){
if(x==i)return;
printf(" %d",x);
b[x]=;
dg(a[x]);
} int main() {
while(scanf("%d",&n)!=EOF) {
FOR(i,,n)scanf("%d",&a[i]);
mz(b);
FOR(i,,n) {
if(!b[i]) {
printf("(%d",i);
dg(a[i]);
putchar(')');
} }
puts("");
}
return ;
}
1002( hdu4986 Little Pony and Alohomora Part I):
题意:随机出一个元素个数为n的1001的输入,求1001的输出的括号对 的个数的期望值。
题解:找规律,分类,近似解
先暴力搞出每种1001的输入,算期望,发现N为一位数的时候后面都算不快了,不过我们得到了前几个数据。
观察数据,可以发现ans(n)=1/1 + 1/2 + 1/3 + ... + 1/n
这个是调和级数!没有超碉公式能算。
不过n大的时候有近似公式,ans(n)约等于 ln(n)+0.57721566490153286060651209
于是我们就数少的时候暴力算,数大的时候用这个约等于的来算。
注意暴力算的时候从1/n加到1,由于浮点数的性质,这样精度比较高。
(其实这个约等于的和暴力算得的有好多数不一样,暴力算的因为精度有限也可能不对。如果要全部输出暴力的结果,可以分段打表,隔一段记一个数,输入n在两段之间时,从上一段记的那个数开始算)
代码:
//#pragma comment(linker, "/STACK:102400000,102400000")
#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<set>
#include<stack>
#include<queue>
using namespace std;
#define ll long long
#define usll unsigned ll
#define mz(array) memset(array, 0, sizeof(array))
#define minf(array) memset(array, 0x3f, sizeof(array))
#define REP(i,n) for(i=0;i<(n);i++)
#define FOR(i,x,n) for(i=(x);i<=(n);i++)
#define RD(x) scanf("%d",&x)
#define RD2(x,y) scanf("%d%d",&x,&y)
#define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define WN(x) printf("%d\n",x);
#define RE freopen("D.in","r",stdin)
#define WE freopen("1biao.out","w",stdout)
#define mp make_pair
#define pb push_back double farm(int n) {
double re=0.0;
for(int i=n; i>=; i--) {
re+=1.0/i;
}
return re;
} int main() {
int i,j;
int n;
while(scanf("%d",&n)!=EOF) {
if(n<=) {///8个0交C++能984ms过,4个0能过
double t=farm(n);
printf("%.4f\n",t);
} else
printf("%.4f\n",log((double)n)+0.5772156649);///实际上10035就不一样了,不过数据里没有
//getchar();
}
return ;
}
1003( hdu4987 Little Pony and Dice ):
题意:大富翁!地图有0~n这些格子,从0开始扔骰子走,骰子有m面,标有1~m。当人到达n或者超过n就结束。求在n结束的概率。(1<= n,m <=10^9)
题解:DP+特判。
f[i]表示到第i个格子的概率,s[i]表示0~i的概率和。
则f[i]=s[i-1]-s[i-1-m]
这样O(n)就能算,但是n<=10^9,光这样算还不行。
再次找规律,发现n大的时候,后面的f[i]会全是一样的数,那么我们遇到连续若干个一样的数,就可以把它当做解了。“一样”我用差小于10^-9来判,连续2000个一样。
这样能过初审了,但是会被hack,system test也过不去,可能是因为m超大的时候很多小数加起来,精度不够。
固定m,则n=m时答案最大。当m=555555时,答案最大也为0,则m>=555555就直接答案为0。加上这个就能过了。
还有一个特判,是n<=m时能直接一个公式求得答案,公式推导我写在代码的注释里了。
代码:
//#pragma comment(linker, "/STACK:102400000,102400000")
#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<set>
#include<stack>
#include<queue>
using namespace std;
#define ll long long
#define usll unsigned ll
#define mz(array) memset(array, 0, sizeof(array))
#define minf(array) memset(array, 0x3f, sizeof(array))
#define REP(i,n) for(i=0;i<(n);i++)
#define FOR(i,x,n) for(i=(x);i<=(n);i++)
#define RD(x) scanf("%d",&x)
#define RD2(x,y) scanf("%d%d",&x,&y)
#define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define WN(x) printf("%d\n",x);
#define RE freopen("D.in","r",stdin)
#define WE freopen("1biao.out","w",stdout)
#define mp make_pair
#define pb push_back
const int maxcul=;
const int maxcnt=;
const double eps=1e-; double f[maxcul+];
double s[maxcul+];
double farm(int m,int n){
if(m>)return 0.0;/// m固定,当n=m时ans取最大值,m大于这个时最大值也是0
if (n<=m) return pow(1.0+1.0/m,n-)/m;
/// C(n-1,0)/m + C(n-1,1)/m/m + C(n-1,2)/m/m/m + ... + C(n-1,n-1)/(m^n)
///=( C(n-1,0) + C(n-1,1)/m + C(n-1,2)/m/m + ... + C(n-1,n-1)/(m^(n-1)) )/m
///=(1+1/m)^(n-1)/m
int i,j;
int cnt=;
mz(f);
f[]=1.0;
s[]=1.0;
for(i=;i<=n;i++){
int minj=max(,i-m);
if(minj==) f[i] = s[i-]/m;
else f[i] = (s[i-] - s[minj-]) / m;
s[i]=f[i]+s[i-];
if(i>m && fabs(f[i]-f[i-])<eps)cnt++;
else cnt=;
if(cnt>maxcnt)break;
}
if(cnt>maxcnt) return f[i];
else return f[n];
} int main() {
int i,j;
int m,n;
while(scanf("%d%d",&m,&n)!=EOF){
printf("%.5f\n",farm(m,n));
}
return ;
}
bestcoder Round #7 前三题题解的更多相关文章
- BestCoder Round #85 前三题题解
sum Accepts: 822 Submissions: 1744 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/13107 ...
- BestCoder Round #86 二,三题题解(尺取法)
第一题太水,跳过了. NanoApe Loves Sequence题目描述:退役狗 NanoApe 滚回去学文化课啦! 在数学课上,NanoApe 心痒痒又玩起了数列.他在纸上随便写了一个长度为 nn ...
- Codeforces Round #524 (Div. 2)(前三题题解)
这场比赛手速场+数学场,像我这样读题都读不大懂的蒟蒻表示呵呵呵. 第四题搞了半天,大概想出来了,但来不及(中途家里网炸了)查错,于是我交了两次丢了100分.幸亏这次没有掉rating. 比赛传送门:h ...
- Lyft Level 5 Challenge 2018 - Final Round (Open Div. 2) (前三题题解)
这场比赛好毒瘤哇,看第四题好像是中国人出的,怕不是dllxl出的. 第四道什么鬼,互动题不说,花了四十五分钟看懂题目,都想砸电脑了.然后发现不会,互动题从来没做过. 不过这次新号上蓝名了(我才不告诉你 ...
- BestCoder Round #11 (Div. 2) 前三题题解
题目链接: huangjing hdu5054 Alice and Bob 思路: 就是(x,y)在两个參考系中的表示演全然一样.那么仅仅可能在这个矩形的中点.. 题目: Alice and Bob ...
- Codeforces Round #530 (Div. 2) (前三题题解)
总评 今天是个上分的好日子,可惜12:30修仙场并没有打... A. Snowball(小模拟) 我上来还以为直接能O(1)算出来没想到还能小于等于0的时候变成0,那么只能小模拟了.从最高的地方进行高 ...
- Codeforces Round #609 (Div. 2)前五题题解
Codeforces Round #609 (Div. 2)前五题题解 补题补题…… C题写挂了好几个次,最后一题看了好久题解才懂……我太迟钝了…… 然后因为longlong调了半个小时…… A.Eq ...
- Educational Codeforces Round 53 (Rated for Div. 2) (前五题题解)
这场比赛没有打,后来补了一下,第五题数位dp好不容易才搞出来(我太菜啊). 比赛传送门:http://codeforces.com/contest/1073 A. Diverse Substring ...
- Codeforces Round #519 by Botan Investments(前五题题解)
开个新号打打codeforces(以前那号玩废了),结果就遇到了这么难一套.touristD题用了map,被卡掉了(其实是对cf的评测机过分自信),G题没过, 700多行代码,码力惊人.关键是这次to ...
随机推荐
- 【BZOJ-1576】安全路径Travel Dijkstra + 并查集
1576: [Usaco2009 Jan]安全路经Travel Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1044 Solved: 363[Sub ...
- 【poj3241】 Object Clustering
http://poj.org/problem?id=3241 (题目链接) MD被坑了,看到博客里面说莫队要写曼哈顿最小生成树,我就写了一个下午..结果根本没什么关系.不过还是把博客写了吧. 转自:h ...
- WPF弹出取消确定框
MessageBoxResult dr = MessageBox.Show("是否在"+ConfigHelper.GetAppSetting("SourceDBName& ...
- AutoIt3(AU3)开发的分辨率快速设置工具
项目相关地址 源码:https://github.com/easonjim/Resolution_Settings bug提交:https://github.com/easonjim/Resoluti ...
- [NOIP2014] 提高组 洛谷P1351 联合权值
题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离. ...
- Java unserialize serialized Object(AnnotationInvocationHandler、ysoserial) In readObject() LeadTo InvokerTransformer(Evil MethodName/Args)
Java unserialize serialized Object(AnnotationInvocationHandler.ysoserial) In readObject() LeadTo Tra ...
- 利用php制作简单的文本式留言板
del.php 代码如下: <html><head ><meta charset="utf-8"><title>我的留言板</ ...
- jQuery焦点不在输入框内判断不能为空
我能说JS和jquery有时候都有病吗?同样的代码,重敲一遍可以了,再过一会不行了.再试一下重敲,一模一样的代码,也不报错.就是不行.反复折腾.... 我帖上来的是经过了1个小时同等功能的测试OK的, ...
- NOIp 0916 爆零记
题目来自神犇chad 上次爆零是说着玩,这次真的爆零了QAQ 好吧貌似是TYVJ的模拟赛打多了..一直按照TYVJ的格式提交的压缩包.. 然后莫名其妙就AK了hhh 来的时候迟到了半小时,昨晚痛苦的补 ...
- css003 选择器:明确设置哪些样式
css003 选择器:明确设置哪些样式 1.每个样式的两个部分:选择器和声明块 1.标签选择器:整体控制 2.类选择器:精确控制(.+字母.数字.连字符或下划线) Css允许的类名为.+字母.数字.连 ...

