题目链接:http://www.nowcoder.com/test/question/analytic?tid=1667855
第一行数据三个整数:n,t,c(1≤n≤2e5,0≤t≤1e9,1≤c≤n),第二行按入狱时间给出每个犯人的罪行值ai(0≤ai≤1e9)
一行输出答案。
3 100 2 1 2 3
2
思路:我用两个变量来控制区间的大小,先向前扩展到c的长度,然后左区间向右移动,寻找下一个符合条件的区间;sum用来记录区间和,O(n)
#include
int num[200005];
int main()
{
int n,t,c;
while(scanf("%d%d%d",&n,&t,&c)!=EOF)
{
for(int i=0;it) {sum=0;i=j+1;}
if(j-i+1c) {sum-=num[i++];}
if(j-i+1==c)
{
sum+=num[j];
if(sum<=t)
cnt++;
else if(sum>t)
{
while(sum>t)
{
sum-=num[i++];
}
}
}
}
printf("%d\n",cnt);
}
return 0;
}
第一行一个数n(2≤n≤1000)表示点数,接下来每行一对整数xi,yi(-1e9<=xi,yi<=1e9)表示网格上的点
一行输出最小面积
2 0 0 0 3
9
//由于必须要沿着网格线剪下,即必须到x、y轴
//so 只有要找最大最小的x,y即可
#include
#include
using namespace std;
struct point
{
int x;
int y;
}po[1005];
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=0;i
第一行五个整数n,m,x,y,t(1≤n,m,t≤1000,1≤x≤n,1≤y≤m); 接下来为一个n*m的矩阵,每行m个一位小数,共n行,第i行第j个数代表坐标为(i,j)的格子钓到鱼的概率为p(0≤p≤1)
输出两行。第一行为概率大的人的名字(cc/ss/equal),第二行为这个概率(保留2位小数)
2 2 1 1 1 0.2 0.1 0.1 0.4
equal 0.20
思路:简单的概率题,首先求<<至少钓到一条鱼的概率=1-一条都钓不到的概率;>>那么现在来求各自钓不到的鱼的概率,cc一直不动,所以很简单,那么ss每次都是随机选择,所以我们要求他的数学期望,在一次选择中不能钓到鱼的概率为1-(每个格子钓到鱼的概率的和 / 总格子数) ;由于是要比较t次,在概率中表示为pow(),最后1-不能的=能的;
#include
#include
int main()
{
int n,m,x,y,t;
while(scanf("%d%d%d%d%d",&n,&m,&x,&y,&t)!=EOF)
{
double cc=0.0,ss=0.0;
double tmp;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
scanf("%lf",&tmp);
if(i==x&&j==y) cc=1-tmp;
ss+=tmp;
}
}
ss=1-ss/(n*m);
cc=1-pow(cc,t);
ss=1-pow(ss,t);
// printf("%f\t%f\n",ss,cc);
if(cc==ss)
{
printf("equal\n%.2f\n",cc);
}
else if(ss>cc)
{
printf("ss\n%.2f\n",ss);
}
else
{
printf("cc\n%.2f\n",cc);
}
}
return 0;
}
第一行N,M,K(2 ≤ N,M ≤ 20, k ≤ 100),N,M为草地大小,接下来K行,每行两个整数x,y,代表(x,y)处有一个蘑菇。
输出一行,代表所求概率(保留到2位小数)
2 2 1 2 1
0.50
想清楚了,就很简单了。
#include
#include
int main()
{
double p[25][25],vis[25][25];
int n,m,k;
while(scanf("%d%d%d",&n,&m,&k)!=EOF)
{
memset(p,0,sizeof(p));
memset(vis,0,sizeof(vis));
int x,y;
for(int i=0;i