2023合肥庐阳区小学组c++

快递费(fee)- 2023庐阳小学T1

题目描述

东风快递公司收费标准:首重12元/KG,续重2元/KG。举例:包裹重量为3公斤,快递费为12+2+2=16(元),已知包裹的重量,求快递费用。

输入格式

输入文件名:fee.in

一个正整数,表示包裹的重量

输出格式

输出文件名:fee.out

一个正整数,该包裹的快递费用。

输入输出样例

输入样例1:

3

输出样例1:

16

说明

【数据范围】

  包裹的重量<=1000

知识点:算术运算

代码:
#include<iostream>
using namespace std;
int main(){
    long long sum=0,n;
    cin>>n;
    if(n>1) sum+=(n-1)*2+12;
    else if(n==1) sum+=12;
    cout<<sum;
    return 0;
}

采伐(wood)- 2023庐阳小学T2

题目描述

为了保护森林,要求采伐作业的时候不能将一棵树从根部锯掉,而是留下一部分,因为这样这棵树可以继续生长。伐木工将其伐木设备的锯片设置为一定高度,这样可以锯掉一棵树这个高度之上的部分。求总计可以得到多少长度的木材。

输入格式

输入文件名: wood.in

共两行:

第一行,两个数N和H,N表示树林中树木的数量,H表示伐木设备的锯片设置的高度;

第二行,N 个整数,表示每棵树的高度,高度不超过10^9。

输出格式

输出文件名:wood.out

一个整数,表示总计可以得到木材的长度。

输入输出样例

输入样例1:
4 10 11 10 9 12
输出样例1:
3
说明

【数据范围】

        N<=10000

        H<=1000000

【耗时限制】1000ms 【内存限制】256MB

知识点:枚举算法

代码: 
#include<iostream>
#include<map>
#include<algorithm>
#include<cmath>
#include<stack>
#include<queue>
#include<vector>
#include<cstdio>
#include<string>
#include<cstring>
#include<sstream>
#include<set>
using namespace std;
int main(){
	long long n,h,sum=0;
	cin>>n>>h;
	for(int i=1;i<=n;i++){
		int x;
		cin>>x;
		if(x>h){
			sum+=(x-h);
		}
	}
	cout<<sum;
    return 0;
}

升降机(lift)- 2023庐阳小学T3

题目描述

升降机是建筑施工中经常使用的载人施工机械。当前升降机在一楼,有N个工人走进了升降机,他们有着各自的目标楼层,升降机的门已经关闭。升降机上升一层需要6s,下降一层需要4秒只有到达工人要去的楼层,升降机的门才需要开关一次,开门需要2秒,关门需要3秒,每下一个人需要1秒。求升降机从一楼将N个人送至各自要去的楼层,并且返回一楼,总共需要的时间。

输入格式

输入文件名:lift.in

两行。

第一行,一个正整数N表示共有N个工人。

第二行,N个非1的正整数,表示N个工人各自目标楼层

输出格式

输入文件名:lift.out

一个整数,表示升降机从一楼将N个人送至各自要去的楼层,并且返回一楼,总共需要的时间。

输入输出样例

输入样例1:
4 
2 5 2 4

输出样例1:
59
说明
【样例1解释】

(6+2+3+1+1)+(6+6+2+3+1)+(6+2+3+1)+4+4+4+4=59

【数据范围】

1<=N<=100000,楼层数不超过 10^9。

知识点:数组,简单排序

 代码:
#include<iostream>
#include<map>
#include<algorithm>
#include<cmath>
#include<stack>
#include<queue>
#include<vector>
#include<cstdio>
#include<string>
#include<cstring>
#include<sstream>
#include<set>
using namespace std;
long long a[100010];
int main(){
	int n,p=1,cnt=1;
	long long t=0;
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i];
	sort(a+1,a+1+n);
	a[n+1]=-1;
	for(int i=1;i<=n;i++){
		if(a[i]==a[i+1]) cnt++;
		else{
			t+=(a[i]-p)*6+2+cnt*1+3;
			cnt=1;p=a[i];
		}
	}
	t+=(a[n]-1)*4;
	cout<<t;
    return 0;
}

栈道(way)- 2023庐阳小学T4

题目描述

光头强打算从山脚到山顶修一条栈道,让游人可以拾阶而上。为了保证栈道不过于陡峭下一步台阶不能高于当前台阶一个单位的高度,当然下一个台阶同当前台阶持平是允许的。按照位置给出地形高度,希望可以选择最多的支点修建栈道,这样栈道更为稳定。那些没有被选择的点,可以实施魔法,让其消失。求修建这样的栈道最多可以选择多少个支点?

输入格式

输入文件名:way.in

第一行,一个整数N。

第二行,N个非负整数(<=1000000)。

输出格式

输出文件名:way.out

一个整数,意义如题所述,修建这样的栈道最多可以选择支点数。

输入输出样例

输入样例1:
10
1 6 2 9 2 8 3 7 4 5
输出样例1:
6
说明
【数据范围】

N<=3000

知识点:线性DP

代码:
#include<iostream>
#include<map>
#include<algorithm>
#include<cmath>
#include<stack>
#include<queue>
#include<vector>
#include<cstdio>
#include<string>
#include<cstring>
#include<sstream>
#include<set>
using namespace std;
int dp[3010],a[3010],ans;
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		dp[i]=1;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=i-1;j++){
			if(a[i]>=a[j]&&a[i]-a[j]<=1){
				dp[i]=max(dp[j]+1,dp[i]);
			}
		}
		ans=max(ans,dp[i]);
	}
	cout<<ans;
    return 0;
}

马拉松(marathon)- 2023庐阳小学T5

题目描述

环湖马拉松全程 L 公里,已经安排了 N 个补给点,位置已经确定。由于预算增加,现在可以增设 K 个补给点。如何安排新增的补给点使得相邻补给点间最大距离最小。相邻补给点间距离也包括起点与第一个补给点之间的距离和最后一个补给点与终点之间的距离。

输入格式

输入文件名:marathon.in

第一行包括 3 个整数 L,N,K,分别表示马拉松全程长度、原有补给点的数量以及最多可以增设的补给点的数量。

第二行,N 个整数,表示原有的 N 个补给点的位置。补给点的位置用距离起点的距离表示,取值范围 (0,L)。

输出格式

输出文件名:marathon.out

一个整数,意义如题所述,表示相邻补给点间最大距离最小值。

输入输出样例

输入样例1:
100 2 1 
70 30
输出样例1:
30
说明
【数据范围】

0<N≤100000

0≤L≤2000000000

0≤K≤2000000000

【耗时限制】1000ms
【内存限制】256MB

代码:
#include<iostream>
#include<map>
#include<algorithm>
#include<cmath>
#include<stack>
#include<queue>
#include<vector>
#include<cstdio>
#include<string>
#include<cstring>
#include<sstream>
#include<set>
using namespace std;
int L,n,k,a[100010];
bool check(int x){
	int sum=0;
	for(int i=1;i<=n+1;i++){
		sum+=(a[i]-a[i-1])/x;
		if((a[i]-a[i-1])%x==0) sum--;
	}
	return sum<=k;
}
int low(int l,int r){	
	while(l<r){
		int mid=(l+r)/2;
		if(check(mid)) r=mid;
		else l=mid+1;
	}
	return l;
}
int main(){
	cin>>L>>n>>k;
	for(long long i=1;i<=n;i++){
		cin>>a[i];
	}
	sort(a+1,a+1+n);
	a[n+1]=L;
	cout<<low(1,L+1);
    return 0;
}

  • 19
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
庐阳区2022年信息学竞赛试题工作日(day)将是一项具有挑战性和丰富内容的学术竞赛活动。信息学竞赛是一项旨在考察参赛者在计算机科学、算法设计和编程技能等方面的能力的竞赛活动。 在庐阳区2022年信息学竞赛试题中,参赛者将面临各种具有难度的问题,这些问题往往涉及到计算机科学的基本概念和算法设计。参赛者需要独立思考和解决这些问题,表现出对编程语言和算法的掌握能力。 试题中可能包括编写程序解决问题的任务,参赛者需要用合适的编程语言编写程序,并根据题目需求输出正确的结果。这个过程要求参赛者在理解问题、设计算法和实现代码等方面具备扎实的计算机科学基础知识和编程技巧。 庐阳区2022年信息学竞赛试题将在工作日进行。参赛者需要在规定的时间内完成试题,并提交自己的答案。竞赛的评判标准将根据参赛者题目的正确性、程序的效率和代码的质量等方面进行评估。 信息学竞赛的目的是激发学生对计算机科学的兴趣,提高他们的编程和问题解决能力。通过参与竞赛,学生们可以拓宽视野、增加知识储备,并提高自己在计算机科学领域的竞争力。 参与庐阳区2022年信息学竞赛试题的选手们将面临一项充满挑战的学术竞赛,他们需要发挥自己的聪明才智,展现自己的实力。希望这次竞赛能够激发更多对信息学的热爱,培养更多的优秀人才。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值