第十三届蓝桥杯参赛感悟(蒟蒻篇)

事先声明,本蒟蒻第一次参加蓝桥杯,目标就是混分,嘿嘿,第一次参加,有点紧张(毕竟300块),代码写的比较乱,还请读者见谅,报的是省赛c++B组

在这里插入图片描述
在这里插入图片描述

我的答案:749(正确答案:1478)
签到题,但是,但是,我今天看dalao题解的时候才发现我做错了,裂开。。。。
后来看了自己的草稿才发现729少乘了2。哎,出师不利。

在这里插入图片描述
在这里插入图片描述

我的答案:5

这题争议比较大,有的认为是4,有的认为是14,在我看来,012不算顺子,321算顺子,所以我写的5,这题不管,题目出的不好哈哈。

在这里插入图片描述

我看完这道题目以后,没多思考,就直接暴力,也没想过会不会爆,看了dalao的题解说要先取余再暴力,本蒟蒻表示考试的时候想都没想,能混到分就万事大吉了哈哈

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
	long long a,b,n;
	scanf("%d %d %d",&a,&b,&n);
	long long sum=0;
	int temp=1,ans=0;
	while(sum<n)
	{
		if(temp>=1 && temp<=5)
		{
			sum+=a;
		}
		else sum+=b;
		temp++;
		ans++;
		if(temp>7)
		{
			temp-=7;
		}
	}
	printf("%d\n",ans);
	return 0;
}

在这里插入图片描述
这题刚开始我尝试着找规律,但没找到,然后就直接暴力做了,后来看了dalao的题解,确实可以用数学方法做,具体思想好像就是看当前这棵树距离两边的距离哪个大,然后用较大的那个距离乘2 就是该树能长到的最大高度了,本蒟蒻表示根本想不到,但其实暴力做也会碰到难处,就是你不知道什么时候跳出循环,这个我纠结了挺久,最后采用的方法是,循环50000次(迫不得已了哈哈),测试了10以内的数据,答案是对的,后面我也就不管啦,反正混分,混不到就算哈哈。

#include<iostream>
using namespace std;
int arr[10010];
int ans[10010];
int main()
{
	int n;
	cin>>n;
	int index=1,index2=n-1;
	int i,j;
	int flag=50000;
	int flag2=1;
	while(flag--)
	{
		for(i=1;i<=n;i++ )
		{
			arr[i]++;
			if(arr[i]>ans[i])
			{
				ans[i]=arr[i];
			}
		}
		if(flag2==1 )
		{
			arr[index]=0;
			index++;
		}
		else
		{
			arr[index2]=0;
			index2--;
		}
		if(index>n || index2<1 )
		{
			flag2=-flag2;
			index2=n-1;
			index=2;
		}
	}
	for(i=1;i<=n;i++ )
	{
		cout<<ans[i]<<endl;
	}
	return 0;
}

在这里插入图片描述
当时看到这道题就蒙了,本蒟蒻平时最讨厌和进制有关的题了,粗看了一眼题目,知道了个大概,应该是我不会做的题目,直接pass!

在这里插入图片描述
粗看题目,我的第一反应就是二维前缀和,然后一顿操作,发现应该没啥问题,然后就直接下一题了,考前刚好看了前缀和和差分数组这方面的知识,很幸运哈哈。

#include<iostream>
#include<cstdio> 
#include<cmath>
using namespace std;
int arr[600][600];
int sum[600][600];
int n,m,k;
int ans;
void judge(int x,int y)
{
	int p,q;
	for(p=x ;p<=n;p++ )
	{
		for(q=y;q<=m;q++ )
		{
					if(sum[p][q]-sum[x-1][q]-sum[p][y-1]+sum[x-1][y-1]<=k)		ans++;
		}
	}
}
int main()
{
	scanf("%d %d %d",&n,&m,&k); 
	int i,j;
	for(i=1;i<=n;i++ )
	{
		for(j=1;j<=m;j++ )
		{
			scanf("%d",&arr[i][j]);
		}
	}
	for(i=1;i<=n;i++ )
	{
		for(j=1;j<=m;j++ )
		{
			if(i==1 )	sum[i][j]=sum[i][j-1]+arr[i][j];
			else if(j==1 )	sum[i][j]=sum[i-1][j]+arr[i][j]; 
			else
			{
				sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+arr[i][j];
			}
		}
	}
	for(i=1;i<=n;i++ )
	{
		for(j=1;j<=m;j++ )
		{
			judge(i,j);
		}
	}
	cout<<ans<<endl;
	return 0;
}

在这里插入图片描述
粗看这题,我想到了dp和卡特兰数,由于本蒟蒻刚学dp没多久,实在不会写转移方程,所以只能猜一下是不是卡特兰数,小试了前四组数据,发现和卡特兰数吻合,我也没多想,直接写。

#include<iostream>
using namespace std;
long long arr[10000100];
int main()
{
	int n;
	cin>>n;
	int i,j;
	arr[0]=1;
	arr[1]=1;
	for(i=2;i<=n;i++ )
	{
		for(j=0;j<i;j++ )
		{
			arr[i]+=(arr[j]*arr[i-j-1]%1000000007);
		}
	}
	cout<<arr[n]<<endl;
	return 0;
}

在这里插入图片描述
这道题,看了会题目,我的想法是深搜,加了一个visit数组判断炸雷是否已经炸了了(不知道算不算是记忆化)。

#include<iostream>
#include<cmath>
using namespace std;
typedef struct graph
{
	int x;
	int y;
	int r;
}Graph;
Graph zha[10010];
Graph pai[10010];
int visit[10010];
int ans;
int n,m;
void dfs(int v)
{
	visit[v]=1;
	int i;
	for(i=0;i<n;i++)
	{
		if((zha[v].x-zha[i].x)*(zha[v].x-zha[i].x)+(zha[v].y-zha[i].y)*(zha[v].y-zha[i].y)<=zha[v].r*zha[v].r && visit[i]==0 )
		{
			dfs(i);
		}
	}
	return;
}
int main()
{
	scanf("%d %d",&n,&m);
	int i,j;
	for(i=0;i<n;i++ )
	{
		cin>>zha[i].x>>zha[i].y>>zha[i].r;
	}
	for(j=0;j<m;j++ )
	{
	cin>>pai[j].x>>pai[j].y>>pai[j].r;
	}
	for(i=0;i<m;i++ )
	{
		for(j=0;j<n;j++ )
		{
			if((pai[i].x-zha[j].x)*(pai[i].x-zha[j].x)+(pai[i].y-zha[j].y)*(pai[i].y-zha[j].y)<=pai[i].r*pai[i].r && visit[j]==0)
			{
				dfs(j);
			}
		}
	}
	for(i=0;i<n;i++ )
	{
		if(visit[i]==1 )	ans++;
	}
	cout<<ans<<endl;
	return 0;
}

在这里插入图片描述
由于时间不够了,最后两题我就浅浅看了一下,这题我大概觉得可以用dp或者dfs做?也不知道对不对,感觉自己也做不出来了哈哈

在这里插入图片描述
确认过眼神,是我做不出来的题,pass!

至此,我的第一次蓝桥杯就结束了,有遗憾,也有幸运,对于平时算法掌握的不算很好的我来说,这次比赛,更多意义上来算是督促自己去学习算法,在备考期间,我了解了一些很奇妙的算法,当然,也被算法折磨的很痛苦哈哈,不论结果如何,我从这次蓝桥学到了很多,有了比较多的收获,我想这些应该是比奖状更加有意义的哈哈,最后希望大家都能取得好成绩,本蒟蒻要继续努力学习算法了哈哈。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ttzif

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值