LightOJ1030 Discovering Gold
题意:
在一个长度为n的一排格子里,每个格子都有相应的金币数,走到相应格子的话,就会得到该格子的金币。
有一个人在1这个位置,手里有一颗色子,色子摇到几,他就前进几步,但如果当前位置+色子数>n,那么他就会重新摇色子。走到n则游戏结束,问游戏结束时,这个人得到金币的期望。
思路:
d[i]表示从i出发能得到的金币期望数.
这题从后往前推,初始情况下d[n]=a[n]是确定的.
d[i]=(d[i+1]+d[i+2]+d[i+3]+d[i+4]+d[i+5]+d[i+6])/6+a[i];(有时候没有6个,最多加到n).
code:
#include<bits/stdc++.h>
using namespace std;
const int maxm=105;
double d[maxm];
int a[maxm];
signed main(){
int T;
int cas=1;
scanf("%d",&T);
while(T--){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
d[n]=a[n];
for(int i=n-1;i>=1;i--){
d[i]=a[i];
double sum=0;
int cnt=0;
for(int j=1;j<=6;j++){
if(i+j>n)break;
sum+=d[i+j];
cnt++;
}
d[i]+=sum/cnt;
}
printf("Case %d: %.10f\n",cas++,d[1]);
}
return 0;
}
牛客 音乐鉴赏
题面:
思路:
code:
#include<bits/stdc++.h>
using namespace std;
signed main(){
int n;
cin>>n;
int sum=0;
for(int i=1;i<=n;i++){
int x;
cin>>x;
sum+=x;
}
double S=sum-90*n;
double ans=S/(9*n+S)*100;
printf("%.2f%\n",ans);
return 0;
}
CodeForces1139 D. Steps to One(
题意:
给一个整数n,n<=1e5
开始你有一个空数组,
每次操作你从1到n中随机选择一个数,然后加入数组,
如果数组的gcd为1则停止操作,否则重复操作
问最后数组的长度期望是多少,在模1e9+7意义下把分数转化为整数
思路:
code:
牛客 身体训练
题意:
解法:
来自牛客用户Kur1su:
code:
#include<bits/stdc++.h>
using namespace std;
const int maxm=1e3+5;
double c[maxm];//最高速度
double d[maxm];//衰减速度
double v,u;
int n;
signed main(){
cin>>n>>v>>u;
for(int i=1;i<=n;i++)cin>>c[i];
for(int i=1;i<=n;i++)cin>>d[i];
double sum=0;
for(int i=1;i<=n;i++){//枚举配送员
for(int j=1;j<=n;j++){//枚举配送员的初始位置
sum+=u/(c[i]-(j-1)*d[i]-v);
}
}
printf("%.3f\n",sum);
return 0;
}