【CSDN竞赛】第十一期解题报告

18 篇文章 0 订阅
17 篇文章 0 订阅

这应该是站内相对详细的解题报告吧。
转载思路请@本人。

感想

关于自己

这一次时间改善了一点点,不过还是不够
前面3题做完后没有什么收获(毕竟挺简单的)。
本人认为题目不能只考做法,还要考思维。
下次努力吧,争取得奖。

关于平台

题目出现原题,还是入门必备的模板题!这种问题不应该再次出现。
手感没有多大变化。
建议将冷却时间改短一些,拜托了。
目前对于本人,系统没出现什么太大的问题,比较稳定(某次比赛除外)。
C S D N CSDN CSDN越做越好。

第一题 (难度:简单)

题目描述

最近小艺酱渐渐变成了一个圆滑的形状-球!! 小艺酱开始变得喜欢上球! 小艺酱得到 n n n个同心圆。 小艺酱对着 n n n个同心圆行染色。 相邻的圆范围内不能有相同的颜色。相隔一层的圆颜色相同。 小艺酱想知道圆最外层的那种颜色全部染了多少?

100分做法

考虑容斥原理,将与外层距离为奇数的面积加上,距离为偶数的面积减去。其中距离为按照半径从小到大排序后间隔的圆的个数。

注意一个问题:圆周率取的越精准越好。
C + + C++ C++代码如下:

#include<bits/stdc++.h>
using namespace std;
double r[1005]={};
double pi=3.14159265358979;
int n;
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%lf",&r[i]);
	}
	sort(r+1,r+n+1);
	double f=1;
	double ans=0;
	for(int i=n;i>=1;i--)
	{
		ans=ans+r[i]*r[i]*pi*f;
		f=-f;
	}
	printf("%.3lf\n",ans);
	return 0;
}

第二题 (难度:入门)

题目描述

存在 n n n个节点,目标节点在 m m m。 每个节点有自己的权值 a a a。 在权值 k k k内(含 k k k值)选择一个权值非 0 0 0节点且与目标节点距离最近。 节点i与节点j的距离为 a b s ( i − j ) abs(i-j) abs(ij)

100分做法

这一题直接按照题意模拟即可。

C + + C++ C++代码如下:

#include<bits/stdc++.h>
using namespace std;
int a[100005]={};
int n,m,k,ans=1000;
int main()
{
	scanf("%d%d%d",&n,&m,&k);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		if(a[i]!=0&&a[i]<=k)ans=min(ans,abs(i-m));
	}
	printf("%d\n",ans);
	return 0;
}

第三题 (难度:简单+)

题目描述

已知存在 n n n个宝物,每个宝物都有自己的质量 m m m和价值 v v v,在考虑选择宝物时只能选择总质量小于等于 M M M的方案,请问在最方案下选择宝物,能获取到最大价值 V V V是多少?

100分做法

01背包问题模板,只要学过动态规划都能做对的一道题。
d p i , j dp_{i,j} dpi,j表示前 i i i个物品,背包大小为 j j j的最大价值,
d p i , j = m a x ( d p i , j , d p i − 1 , j − m i + v i ) dp_{i,j}=max(dp_{i,j},dp_{i-1,j-m_i}+v_i) dpi,j=max(dpi,j,dpi1,jmi+vi)
直接按照模板打上去即可。

C + + C++ C++代码如下:

#include<bits/stdc++.h>
using namespace std;
int m[100005]={},v[100005]={},dp[1005]={};//滚动数组
int n,M;
int main()
{
	scanf("%d%d",&n,&M);
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d",&m[i],&v[i]);
		for(int j=M;j>=m[i];j--)
		{
			dp[j]=max(dp[j],dp[j-m[i]]+v[i]);//将第一维滚动掉
		}
	}
	printf("%d\n",dp[M]);
	return 0;
}

第四题(难度:中等+)

题目描述

N N N个客人与足够多张的圆桌。主人安排每位客人坐在一个圆桌边,但是每位客人希望自己左右边上分别有一些空座位,不然会觉得害羞。注意,如果一个客人所在的圆桌只有他一个人,那么他左边的空座位数量就是他右边的空座位数量。 试问主人需要准备多少个座位,才能让每个客人舒适的坐下。

100分做法(证明找其他大佬)

贪心算法。考场上乱推代码莫名对了。
这也是为什么我用的是 C C C语言,因为我怕我打的 C + + C++ C++修改后不能撤回来了。
l l l r r r分别从小到大排序,然后一一匹配求最大值,相加后加上人数就是答案。

C C C代码如下:

#include<stdio.h>
#include<math.h>
long long a[100005]={},b[100005]={},c[100005]={};
int n;
long long max(long long x,long long y){return x>y?x:y;}
void msort(int l,int r)
{
	if(l>=r)return;
	int mid=(l+r)>>1;msort(l,mid);msort(mid+1,r);
	int i=l,j=mid+1,k=l;
	while(i<=mid&&j<=r)
	{
		if(a[i]<a[j])c[k++]=a[i++];
		else c[k++]=a[j++];
	}
	while(i<=mid)c[k++]=a[i++];
	while(j<=r)c[k++]=a[j++];
	for(k=l;k<=r;k++)a[k]=c[k];
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%lld%lld",&a[i],&b[i]);
	}
	msort(1,n);
	for(int i=1;i<=n;i++)
	{
		long long t=a[i];a[i]=b[i];b[i]=t;
	}
	msort(1,n);
	long long ans=0;
	for(int i=1;i<=n;i++)
	{
		ans+=max(a[i],b[i]);
	}
	printf("%lld\n",ans+n);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
软件测试竞赛题目csdn是一个面向软件测试领域的竞赛平台,旨在提升软件测试技能和知识能力。这个平台上的竞赛题目主要涵盖了软件测试的各个方面,包括测试策略、测试用例设计、缺陷管理和自动化测试等内容。参与者可以通过参加这些竞赛,与其他测试人员进行技术交流和切磋,提高自己的测试水平,同时也可以通过竞赛进行实践,锻炼自己的软件测试技能。 在软件测试竞赛题目csdn上,参与者可以选择自己感兴趣的竞赛题目进行参与。这些题目根据难易程度和内容类型进行分类,参与者可以根据自己的实际情况选择适合自己的题目进行参与。在参与过程中,参赛者需要根据题目要求制定测试策略和设计相应的测试用例,同时还需要进行测试执行和缺陷管理等工作。 通过参与软件测试竞赛题目csdn,参赛者可以不仅可以提升自己的软件测试技能,还可以与其他测试人员进行经验交流,了解业界最新的测试方法和技术。此外,优秀的参赛者还有机会被一些知名软件测试公司或者人才中介公司发现,从而获得更好的职业发展机会。 总之,软件测试竞赛题目csdn为软件测试人员提供了一个学习和交流的平台,能够有效地提升软件测试技能和知识水平。通过参与这些竞赛,参赛者可以提升自己的测试能力,同时也可以通过竞赛获得更好的职业发展机会。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值