2023年南海区信息学C++真题

第1题     1.购物     时限:1s 空间:256m

快到春节了,小慧的妈妈在京东网站购买年货,她共购买了n种年货,每种年货的单价为ai元,她购买了bi件,如果购买的总价超过s元(含s元)就不用运费,否则就要付运费x元,小慧的妈妈希望小慧算算共需要付费多少元

数据范围

对于80%的数据,1<=n<=10^3,1<=ai,bi<=10^3,1<=s,x<=10^5

对于100%的数据,1<=n<=2*10^5,1<=ai,bi<=10^4,1<=s,x<=10^6

输入格式

行输入n,s,x

接下来n行,每行2个整数ai,bi。

输出格式

 输出需付费多少元

输入/输出例子1

输入:

2 2000 50

1000 1

100 6

输出:

1650

#include<bits/stdc++.h>
using namespace std;
long long n,s,x;
long long a[500005],b[500005],c;
int main(){
	scanf("%lld%lld%lld",&n,&s,&x);
	for(int i=1;i<=n;i++){
		scanf("%lld%lld",&a[i],&b[i]);
		c=c+a[i]*b[i];
	}
	if(c<s){
		c=c+x;
	}
	cout<<c;
    return 0;
}
第2题     2. 衣服     时限:1s 空间:256m

小慧看中了某款上衣,购买了M件,但她觉得还不够,因为她希望每次外出的时候(包括上学、游玩、外出就餐)都能穿这款衣服,而她又只有不需穿这衣服时才会洗衣服,每件衣服穿过一次必须要清洗后才能再穿。现在已知未来N天里小慧的计划,问小慧至少需要再购买多少件这款衣服。

数据范围

对于50%的数据,1<=N,M<=10^3;

对于100%的数据,1<=N,M<=10^5;

输入格式

输入第一行两个整数N,M。

第二行为N个数字,数字只包含0,1,2,3。其中

0表示这天没有外出计划,不用穿这款衣服,但要把前面已穿过的衣服洗干净。

1表示这天要上学,需要穿这款衣服。

2表示这天要外出活动,需要穿这款衣服。

 3表示这天要外出就餐,需要穿这款衣服。

输出格式

输出一个整数,表示至少需要再购买多少件衣服。

输入/输出例子1

输入:

6 1

112032

输出:

2

样例解释

原来已有一件衣服,第一、二、三天都需要穿这种衣服,第四天可以清洗衣服,第五、六天也需要穿这种衣服。因此至少需要再买2件。

#include<bits/stdc++.h>
using namespace std;
int n,m,s,maxx;
char a;
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
    	cin>>a;
    	if(a!='0'){
    		s++;
    		maxx=max(maxx,s);
    	}else{
    		s=0;
    	}
    }
    if(maxx<=m){
    	cout<<0;
    }else{
    	cout<<maxx-m;
    }
    return 0;
}
第3题     3.游戏通关     时限:1s 空间:256m

小慧在玩一个智力通关游戏,这个游戏有n个关卡,每个关卡需要xi的时间看说明书,需要yi的时间通关。但如果想多次通某个关卡,则只需第一次看说明,后面不用再看说明(即如果想打通第i关t次,则所需时间为xi+t*yi)。

游戏时,必须按次序通关(即只有打通第一关,才能进行第二关,如此类推),求小慧要通m关的最少时间(可以重复通关)。

数据范围

对于50%的数据,1<=n,m<=10^4

对于100%的数据,1<=n,m<=2*10^5, 1<=xi , yi<=10^9

输入格式

第一行,两个整数n,m

接下来n行,每行两个整数xi,yi。

输出格式

输出通关m次所需的最少时间。

输入/输出例子1

输入:

3 4

3 4

2 3

4 2

输出:

18

样例解释

第一次通第一关用7分钟,

第二次通第二关用5分钟,

第三次继续通第二关用3分钟,

第三次继续通第二关用3分钟。

#include<bits/stdc++.h>
using namespace std;
long long n,m,xi,yi,s,sum,minn=1e+15;
int main(){
    scanf("%lld%lld",&n,&m);
    for(long long i=1;i<=n;i++){
    	scanf("%lld%lld",&xi,&yi);
    	s+=xi+yi;
    	sum=s+(m-i)*yi;
    	minn=min(minn,sum);
    }
    cout<<minn;
    return 0;
}
第4题     4.好数     时限:1s 空间:256m

 一个数列中有n个整数,其中一个数是好数的条件是:去掉该数后剩下的数如果从前往后数,奇数位置的数之和跟偶数位置的数之和相等,那么该数是“好数”。

 给出n个整数的数列,问该数列中有多少个“好数”。

数据范围

对于40%的数据,1<=n<=10^4, ai<=1000;

对于100%的数据,1<=n<=2*10^5, ai<=100000

输入格式

第一行,一个正整数n。

第二行,n个整数,表示该数列中的数ai。

输出格式

输出好数的个数。

输入/输出例子1

输入:

7

5 5 4 5 5 5 6

输出:

2

第5题     5.文本框     时限:1s 空间:256m

小慧把她学会的英文单词记录了下来,现在她希望在一个文本框里完全显示出她记录的单词库。已知这个文本框最多只能显示M行,小慧的单词库有N个单词,要求按原次序显示所有单词,每个单词至少要用一个空格分开,而且一个单词的所有字母必须放在同一行。问这个文本框至少需要多宽才能满足小慧的需求。

数据范围

对于40%的数据,1<=N,M<=10^3,每个单词的长度<=10^2。

对于100%的数据,1<=N,M<=2*10^5,每个单词的长度<=10^9。

输入格式

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

第二行,N个正整数,表示每个单词的长度。

输出格式

能把所有单词显示出来的文本框的最少宽度。

输入/输出例子1

输入:

13 3

9 5 2 7 1 8 8 2 1 5 2 3 6

输出:

26

输入/输出例子2

输入:

30 8

8 55 26 97 48 37 47 35 55 5 17 62 2 60 23 99 73 34 75 7 46 82 84 29 41 32 31 52 32 60

输出:

189

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值