模拟赛2--小学组复赛CSP-X 补题报告

一、题目报告

第一题AC,其余的题不大会,就得100分,当然,比赛后AK

题目一、独木桥

时间限制:1秒        内存限制:128M

题目描述

长度为 LL 米的独木桥上有 n 个人,他们每个人都想以最快的时间离开危险的独木桥。已知每个人在独木桥上的行走速度为 1 米 / 秒 ,每个人只要能走到独木桥的两个端点中的其中一个就可以离开独木桥。
由于独木桥的桥面宽度很窄,只能容纳一个人通过,当两个人相遇时,他们无法交错通过,只能各自调转方向,继续沿反方向行走。
给你独木桥上的人数 nn ,独木桥的长度 LL , 第 ii 个人的初始位置到独木桥左端点的距离aia​i​​ 米(每个人开始的朝向未知,但他们可以根据需要随时调转行走的方向)。
请计算出所有人同时出发,全部都离开独木桥所需的最短时间。

输入格式(输入文件为 bridge.in)

第一行一个整数 nn ,表示人数。
第二行一个整数 LL ,表示独木桥的长度(米)。
第三行是a1a​1​​,a2a​2​​ …ana​n​​ ,其中 aia​i​​ 表示第 ii 个人初始位置到独木桥左端点 的距离。

输出格式(输出文件为 bridge.out)

输出一行一个整数,表示所有人都离开独木桥所需的最短时间。

输入样例 #1
  1. 3
  2. 10
  3. 2 6 7
输出样例 #1
  1. 4
样例一说明

说明:三个人同时出发,第一个人向左走,需要 2秒离开桥,第二个人向右走需要44秒离开桥,第三个人向右走需要3秒离开桥。所以,4秒后,三个人都离开了独木桥。

输入样例 #2
  1. 7
  2. 214
  3. 11 12 7 13 176 23 191
输出样例 #2
  1. 38

本道题就是计算桥面中点里桥面最快时间

我先放个错误代码,可以看一看我哪里错了

(可以看一下,是gd学习平台提交代码需要去掉freopen和fclose,简直是太有实力了)

接下来就是AC代码,不好好看的人一定把他抄上了

AC代码

#include<bits/stdc++.h>
using namespace std;
int n,l,a[1000005],ans,maxx=-1;
int main(){
	freopen("bridge.in","r",stdin) ;
	freopen("bridge.out","w",stdout);
	int maxx=-1;
	cin>>n>>l;
	for(int i=1;i<=n;i++){
		cin>>a[i]; 
	}
	for(int i=1;i<=n;i++){
		if(a[i]>=l/2){
			a[i]=l-a[i];
		}
	} 
	for(int i=1;i<=n;i++){
		if(a[i]>maxx){
			maxx=a[i];
		}
	}
	cout<<maxx;
	fclose(stdin);
	fclose(stdout);
    return 0;
}

但是判题机给我搞了个一百

总结

一点要符合平台,不要咬原封不动的复制

第二题、移动棋子

时间限制:1秒        内存限制:128M

题目描述

一维的棋盘上有无限多个格子,每个格子都有一个编号,最中间的格子编号为 00 ,00 号格子向右依次编号为 1,2,3,… ,向左依次编号为 −1, −2, −3,… 。
小明的目标是要将一枚棋子从 xx 号格子移动到 yy 号格子。
每一次操作有两种选择:
操作 11 :向右移动 11 个格子。
操作 22 :从当前棋子所在的 aa 号格子,直接跳到 −a−a 号格子(如:可以从 66 直接跳到 −6−6 ,也可以从 −6−6 直接跳到 66 )。
可以证明,无论整数 xx 和 yy 的值是多少,目标总是可以实现的。
请你设计程序,帮小明计算把棋子从 xx 号格子移动到 yy 号格子需要的最少操作次数。

输入格式(输入文件为 chess.in)

一行,两个整数 xx 和 yy , 表示要将棋子从 xx 号格子移动到 yy 号格子。

输出格式(输出文件为 chess.out)

一个整数,表示小明把棋子从 xx 号格子移动到 yy 号格子需要的最少操作次数。

输入样例 #1
  1. 10 20
输出样例 #1
  1. 10
样例一说明

说明:需要进行1010次操作11。

输入样例 #2
  1. 10 -10
输出样例 #2
  1. 1
样例二说明

需要进行1次操作2

输入样例 #3
  1. -10 -20
输出样例 #3
  1. 12

本题是将x,y分成多种情况 类似骗分代码

,每个情况都可以拿上几分

先放AC代码

#include<bits/stdc++.h>
using namespace std;
int main(){
	int a,b;
	cin>>a>>b;
	if(a>b&&((a<0&&b<0)||(a>0&&b>0))){
	    cout<<abs(abs(a)-abs(b))+2<<endl;
	}
	else if((a<0&&b>0)||(a>0&&b<0)){
	    cout<<abs(abs(a)-abs(b))+1<<endl;
	}
	else{
        cout<<abs(abs(a)-abs(b))<<endl;
	}
    return 0;
}

if是最简单的情况,求下绝对值就行

else if是另一种情况

else是最后的一种情况 都有求绝对值的代码 相信我,比较简单。

第三题、动物园

先看描述

时间限制:1秒        内存限制:128M

题目描述

某动物园里有nn个场馆和mm种动物(m≤n)(m≤n)。

nn个场馆的编号分别用 1,2,3,..,n1,2,3,..,n 表示;mm种动物的编号分别用 1,2,3,..,m1,2,3,..,m 表示。每一个场馆中只饲养了一只动物,不同的场馆可能饲养着相同种类的动物。

这个动物园的门票比较特殊,游客在购买门票时必须说明要参观的场馆的起止编号aa和bb(起止编号会打印到游客购买的门票上),代表游客只能参观动物园的第aa个场馆至第bb个场馆(包含 a,ba,b)里的动物,其他的场馆不能去。门票按一个场馆十元收费。

如果你购买的门票的起止场馆编号是 33 到 88,那么你需要花 6060 元钱购买门票,只能观看3,4,5,6,7,83,4,5,6,7,8 号场馆的动物。

小明希望看到动物园内所有种类的动物,同时小明是个非常节约的孩子,他希望花最少
的钱买门票。 请你帮小明计算:他最少需要花费多少钱买门票才能看到所有种类的动物(同
一种动物他可能不止看一个)。注意:小明只能买一张门票。

输入格式(输入文件为 zoo.in)

第一行两个整数 n,mn,m,分别表示动物园内的场馆数量及动物种类数量。

第二行是 x1,x2,⋯,xnx​1​​,x​2​​,⋯,x​n​​,其中xix​i​​表示第ii个场馆中的动物种类编号。

输出格式(输出文件为 zoo.out)

一行一个整数pp,表示小明的门票费用。

输入输出样例

样例 1 输入

  1. 12 5
  2. 2 5 3 1 3 2 4 1 1 5 4 3

*样例 1 输出

  1. 60

先看AC代码

利用双指针解决,我比较擅长,但是我没做到那哈哈。

第四题、摧毁

时间限制:1秒        内存限制:128M

题目描述

坐地日行八万里,巡天遥看一千河。

20772077年,人类不仅仅是赛博科技得到了发展,太空技术也已经得到了极大的发展。地球的不同外轨道上已经充斥着各种功能用途的人造卫星。因为一个轨道上的卫星数量是有上限的,且卫星更新换代速度很快,如果想要发射新的卫星,需要把所有旧的卫星摧毁。

人类有两种不同的武器可以摧毁卫星,具体如下(其中PWPW为新的能量单位):
(1)使用定点激光武器花费 1 PW 的代价摧毁任意轨道上指定的一个卫星。
(2)使用脉冲轨道武器花费 c PW 的代价把某一轨道上的所有卫星摧毁。

现在有n个旧卫星分布在不同的外轨道上,你的任务是摧毁这些旧卫星。给出这n个卫
星的轨道编号,求将这些卫星全部摧毁的最小代价是多少? 

输入格式( 输入文件名为 destroy.in) 

第一行一个正整数TT,表示测试数据组数。

接下来对于每组测试数据(注意:每组测试数据有22行数据,以下共2∗T2∗T行数据):

第一行两个正整数nn和cc表示需要摧毁的卫星数量和使用脉冲轨道武器的代价。

第二行 是x1,x2,⋯,xnx​1​​,x​2​​,⋯,x​n​​,其中xix​i​​表示第ii个卫星的轨道编号。

输出格式( 输出文件名为 destroy.out)

输出T行答案,对于每组测试数据,输出一行一个整数表示摧毁所有卫星的代价。

输入输出样例

样例 1 输入

 
  1. 4
  2. 10 1
  3. 2 1 4 5 2 4 5 5 1 2
  4. 5 2
  5. 3 2 1 2 2
  6. 2 2
  7. 1 1
  8. 2 2
  9. 1 2

样例 1 输出

 
  1. 4
  2. 4
  3. 2
  4. 2

样例说明: 对于第一组测试数据,使用脉冲武器的代价为 1 PW。轨道 11 上有 22 个卫星,轨道 22 上有 33 个卫星,轨道 44 上有 22 个卫星,轨道 55 上有 33 个卫星。因此对于轨道 11、22、44、55,均使用脉冲武器各花费 1PW 的代价可全部摧毁,总的代价为 44 PW,很显然该方案为总代价最小方案。

对于第二组测试数据,使用脉冲武器的代价为 2 PW。轨道 11 上有 11 个卫星,轨道 22 上有33 个卫星,轨道 33 上有 11 个卫星。因此,对于轨道 11 采用激光武器,轨道 22 采用脉冲武器,轨道 33 采用激光武器可全部摧毁所有卫星,总的代价为 4 PW,很显然该方案使得总代价最小。

数据范围

对于 30% 的数据,T=1,1≤n≤10,1≤ai≤10,1≤c≤10T=1,1≤n≤10,1≤a​i​​≤10,1≤c≤10;
对于 60% 的数据,1≤n≤103,1≤ai≤1000,1≤c≤1001≤n≤10​3​​,1≤a​i​​≤1000,1≤c≤100;
对于 100% 的数据,1≤T≤10,1≤n≤106,1≤ai≤106,1≤c≤1001≤T≤10,1≤n≤10​6​​,1≤a​i​​≤10​6​​,1≤c≤100, 且所有测试数据的nn加起来不超过106

要想求最小代价就可以看看能不能直接给他一下穿掉(可以用AMR大狙),若不能一下解决

就可以一下一下解决(可用RPG)其实更省钱

关注我

并且关注#difine 名字 用户昵称

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值