【2020年庐阳区小学区赛】

1.时长 【time】

描述

今年的环湖马拉松赛,出发枪响时刻是a时b分,冠军到达终点的时刻是c时d分。问冠军用时多少分钟跑完全程。

输入

共两行。第一行,两个整数a和b

第二行,两个整数c和d

保证出发时刻在到达时刻之前

输出

输出一行为一个整数,意义如题所述。

输入样例 1

9 10
10 50

输出样例1

100

提示

数据范围/约定

0<=a,c<=23

0<=b,d<=59

#include<bits/stdc++.h>
using namespace std;
int main(){
	int a,b,c,d;
	cin>>a>>b;
	cin>>c>>d;
    //这题就是数学题
	cout<<(c-a)*60+(d-b); 

	return 0;
	}

2.解密 【key】 

描述

为了防止信息传递过程中被截获,往往需要对传输的文本用一定的方式加密, 简单的加密算法虽然不足以完全避免信息被破译,但仍然能防止信息被轻易的识别

有一种对26个字母的加密方式是"对称加密"。所谓"对称加密"就是26个英文字母,以中间为对称轴,左右对称,比如,A被加密为Z, Y被加密为B,小写字母也是如此,如c被加密为x,W被加密为d

现在给定一个加密后的字母,请输出加密前是哪一个字母.

输入

一个英文字母,为A~Z或a~z中的一个,表示加密后的字母。

输出

一个字母,为加密前的字母。

输入样例 1复制

Z

输出样例1复制

A
#include<bits/stdc++.h>
using namespace std;
int main(){
    //凯撒加密
	char a;
    cin>>a;
	if(a>='a'&&a<='z'){
         cout<<(char)(219-a)<<endl;
    }else{
         cout<<(char)(155-a)<<endl;
    }
    return 0;
}

凯撒加密,但是升级版

3.选择 【min】

描述

正方体是特殊的长方体,棱长都相等。有个正方体, 现在需要挑选出棱长最小的正方体。依次给定N个正方体的棱长,输出棱长最小正方体的序号,若有多个,按照序号由小到大输出。

输入

第一行,一个整数N

第二行,N个整数,依次表示序号1~序号N正方体的棱长

输出

输出一行,一个或多个整数,意义如题所述。

输入样例 1复制

8
9 2 5 4 3 9 2 6

输出样例1复制

2 7

提示

数据范围/约定.

1<=N<= 100000 ,1<=棱长<=100000

#include<bits/stdc++.h>
using namespace std;
int main(){
    //类似桶
	int n,a[100005],minn=100000;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>a[i];
        if(a[i]<minn){
        	minn=a[i];
		}
    }
    for(int i=0;i<n;i++){
        if(a[i]==minn){
        	cout<<i+1<<" ";
		} 
    }

	return 0;
	}

4.座位 【seat】

描述

考场座位号般按照S型排列, 现在知道某个考生的考号,问其所在第几排第几个座位,即所在的行和列。比如如图所示

考场,有7行4列的座位,12号考生所在的座位为3行2列

微信截图_20210509113739.png

输入

第一行,为三个整数N,M和K,表示考场有N行M列的座位,K为考生考号。

输出

两个整数,表示K号考生所在行和列

输入样例 1复制

7 4 12

输出样例1复制

3 2

提示

数据范围/约定

0<N,M<=1000

K<=N*M

#include<bits/stdc++.h>
using namespace std;
int a,ans1,ans2,n,m;
int main(){
	cin>>n>>m>>a;
	if(a<=n){
		ans1=1,ans2=a;
		cout<<a<<' '<<1;
		return 0; 
	}else{
		ans1=a/n;
		ans2=a%n;
		if(ans2==0){
			ans2=n;
		}
		else{
			ans1++;
		}
		if(ans1%2==0){
			ans2=n-ans2+1;
		}
		
	}
	cout<<ans2<<" "<<ans1;
	return 0;
}

纯模拟

5.

描述

李老板需要总长为M米的木材,他安排光头强去砍树。树林里有N棵树,为了保护环境,不能将一个树完全砍掉,会留出一部分,因为这样树还可以继续生长。光头强将他的砍树装置的锯片高度设置为H米,这样可以锯掉所有的树比H高的部分。求在得到M米木材的前提下,H的最大值。

比如,一共有4棵树,高度分别为20、15、8、17,需要6米的木材,若将锯片的高度设置为15米,这样可以得到的木材为5+0+0+2=7米,若锯片的高度提高1米,设置为16米,只能得到木材的长度4+1=5。为了得到6米的木材,锯片的高度最大只能设置为15米。

输入

第一行,两个整数N和M。

第二行,N个整数,表示每棵树的高度

输出

一个整数,意义如上所述。

输入样例 1复制

4 6
20 15 8 17

输出样例1复制

15

提示

数据范围/约定

1<=N<=100000

1<=M<2^31

保证所有树的总长度不小于M

不要被数据范围吓到,这就是普通二分

#include<bits/stdc++.h>
using namespace std;
int n,m,a[1000010],ans;
bool check(int x){
	long long he=0;
	for(int i=1;i<=n;i++){
		he=he+max(0,a[i]-x);
	}
	return he>=m;
} 
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	int l=0,r=2000000000,mid;
	while(l<=r){
		mid=l+(r-l)/2;
		if(check(mid)){
			ans=mid;
			l=mid+1;
		}else{
			r=mid-1;
		}
	}
	cout<<ans<<endl;

	return 0;
	}

6.取数 【max】

描述

盒子里面有N个球,每个球上都有一个数,你每次可以取走一个球,这个球上的数是x,你就可以得到x的分值,若还有其他的球上的数值也是x,你可以将这些球一起取走, 但同时就有一个限制: 其他的球,若上面的数为x-1或x+1的话就不能被取了,相当于这些球被剔除。求你能取得的最大分值。

输入

第一行,一个整数N

第二行,N个整数,为球上的数值xi

输出

输出一行,为一个整数,意义如题所述。

输入样例 1复制

5
5 3 5 3 4

输出样例1复制

16

提示

数据范围/约定

1<=N<=1000000

1<=xi<= 1000000


#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int n,t,cnt[N],maxt;
long long f[N];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>t;
		cnt[t]++;
    maxt=max(maxt,t);
	}
    f[1]=cnt[1];
    f[2]=max(cnt[1],cnt[2]*2);
	for(int i=1;i<=maxt;i++){
		f[i]=max(f[i-1],f[i-2]+cnt[i]*i);
	}
	cout<<f[maxt];
}

纯模拟

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值