模拟二补题报告

S15192李祥雨

一、题目报告

        考试中第一题AC,第二题50分(5组数据),第三题10分(1组数据),第四题30分(4组数据);比赛后全部AK。
 

二、赛中概况

        第一题看完题后觉得很简单,写了一下,成功AC。

        第二题先写了很多个if判断,但情况考虑少了,只过了一半。

        第三题看着很熟悉,但题有些变化,按思路写了一下,只过了样例。

        第四题先写了一个,数组爆站了。之后改了一下,过了四组。

三、解题报告

T1.独木桥(bridge)

题目情况 

        比赛时AC

题目描述

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

题目解析

        找出每个人离最近的端口的距离,并找到离最近的端口最远的人。

AC代码

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,l,t,m=0;
	cin>>n>>l;
	for(int i=1;i<=n;i++){
		cin>>t;
		m=max(min(t,l-t),m);
	}
	cout<<m<<"\n";
	return 0;
}

       

T2.移动棋子(chess)

题目情况 

        比赛时50分,比赛后AC

题目描述

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

题目解析

        通过判断找出把棋子从 𝑥 号格子移动到 𝑦 号格子需要的最少操作次数。

AC代码

#include<bits/stdc++.h>
using namespace std;
int main(){
	long long ans,x,y;
	cin>>x>>y;
	long long len=abs(abs(x)-abs(y));
	if(x*y>0){
		if(x>y){
			ans=len+2;
		}else{
			ans=len;
		}
	}else if(x*y<0){
		ans=len+1;
	}else{
		if(x<y){
			ans=len;
		}else{
			ans=len+1;
		}
	}
	cout<<ans<<"\n";
	return 0;
}

T3.动物园(zoo)

题目情况 

        比赛时10分,比赛后AC

题目描述  

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

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

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

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

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

题目解析

        应用双指针

AC代码

#include<bits/stdc++.h>
using namespace std;
queue<int> q;
int n,m,a[1000008],vis[2008];
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	int L=1,R=0,cnt=0,ans=0x3f3f3f;
	while(R<n){
		while(cnt<m&&R<n){
			R++;
			vis[a[R]]++;
			if(vis[a[R]]==1) cnt++;
		}
		while(cnt==m){
			ans=min(ans,R-L+1);
			vis[a[L]]--;
			if(vis[a[L]]==0) cnt--;
			L++;
		}
	}
	cout<<ans*10;       
	return 0;
}

T4.摧毁(destroy)

题目情况 

        比赛时30分,比赛后AC 

题目描述 

 

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

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

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

题目解析

        用桶和比较做。

AC代码


#include<bits/stdc++.h>
using namespace std;
const int m=1e6+8;
int cnt[m];
int main(){
	int t;
	cin>>t;
	for(int i=1;i<=t;i++){
		int n,c,x,ans=0;
		memset(cnt,0,sizeof cnt);
		cin>>n>>c;
		for(int i=1;i<=n;i++){
			cin>>x;
			cnt[x]++;
		}
		for(int i=1;i<=m;i++){
			ans+=min(c,cnt[i]);
		}
		cout<<ans<<"\n";
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值