22

本文精选了三道算法竞赛题目并提供了详细的解题思路和代码实现。第一题涉及期望值计算,通过动态规划求解面条形成环的期望数量;第二题分析了符号串导致越界的小球位置;第三题探讨了周期序列的上升或下降趋势判断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1
题意 有n根面条,端点相连,求圈个数 的期望

:) 一开始做的时候,觉得和排列组合有关,可是没能凑出样例来…

分析
加一根面条,端点有2n-1个点可以连 总体可以分为两种情况
情况一 自己成为一个新的圈 这个概率为 1/(2
n-1);
情况二 和原来的组成一个圈 圈的个数没有增加 这个概率为 (2n-2)/(2n-1);

#include<bits/stdc++.h>
using namespace std;
double e[1000001];
int main()
{
	int t,i,n;
	e[1]=1.000000;
	for(i=2;i<=1000000;i++)
	 e[i]=(e[i-1]+1.0)/(2*i-1)+e[i-1]*(2*i-2)/(2*i-1);
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		printf("%lf\n",e[n]);
	}
	return 0;
}

2
题意:有n个位置,每个位置上有一个符号,代表向左或者向右,问你当小球在那些位置的时候会越界(小于1或者大于n)

分析:

观察发现,左边的连续的<和右边的连续的>都会掉下去。
:) 没有分析出来,一开始还理解错了题意

#include<bits/stdc++.h>
using namespace std;
int a[200002];
int main()
{
	int n;
	string s; 
	while(cin>>n>>s)
	{
		int ans=0;
		for(int i=0;i<n;i++)
		 if(s[i]=='<')
		  ans++;
		 else
		  break;
		for(int i=n-1;i>=0;i--)
		 if(s[i]=='>')
		  ans++;
		 else
		  break;
		cout<<ans<<endl;
	}
	return 0;
}

3
题意 序列是这样的 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, and then cycle repeats, thus after the second 1 again goes 0.
给出n个连续天数,判断接下来的一天,这个数是up还是down
分析 可能是 情况没有分析全 所以没有过吧

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn =1e5+8;
int sz[maxn];
int main()
{
	ll n;
	while(cin>>n)
	{
		for(int i=0;i<n;i++)
		 cin>>sz[i];
		if(n==1)
		{
			if(sz[n-1]==15) cout<<"DOWN"<<endl;
			else if(sz[n-1]==0) cout<<"UP"<<endl;
			else cout<<"-1"<<endl;
		}
		else 
		{
			if(sz[n-1]-sz[n-2]>0)
			{
				if(sz[n-1]==15) cout<<"DOWN"<<endl;
				else cout<<"UP"<<endl;
			}
			else
			{
				if(sz[n-1]==0) cout<<"UP"<<endl;
				else cout<<"DOWN"<<endl;
			}
		}
		
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值