CSP-X仲弘屹补题报告

学号:S12906

一、题目梗概

1.做饭(cook)

2.评价标准(criterion)

3.小可买菜(buy)(赛后通过)

4.美味佳肴(cuisine)

T1(cook):

问题描述

小可对达达真的是真爱!

小可为了体现对达达的爱,特意要为即将下班的达达做一顿丰富的晚饭!

已知达达到家时间是 K 时刻,并且知道当前处在 now 时刻。

小可需要 p 秒时间去准备好饭菜。

假设小可制作晚饭总共需要 q 秒时间。

请问赶在达达到家之前,小可是否能准备完晚饭。

输入格式

输入第一行按照 hh : mm : ss,即时:分:秒表示的时间 now,表示当前时间。

输入第二行按照 hh : mm : ss,即时:分:秒表示的时间 K,表示达达到家的时刻。

输入第三行两个整数 p,q,分别表示准备时间和制作时间。

输出格式

如果可以赶在达达回家之前制作完晚饭,输出Yes,否则输出No

输入样例1
 
  1. 11:45:14
  2. 19:19:0
  3. 114 514
输出样例1
 
  1. Yes
输入样例2
 
  1. 11:45:14
  2. 11:56:0
  3. 1145 14
输出样例2
 
  1. No
提示

输入的 K 和 now 使用距离某个时刻之后的时分秒记录,可能不符合现实中的时间记录。

时间是24小时进制,时间的计算方式与现实生活中相同。

数据描述

使用 hh,min,ss 分别表示输入时刻中的时、分、秒。

对于 40%的数据:0≤ℎℎ≤23,0≤mm,ss≤59,0≤q,p≤10000≤hh≤23,0≤min,ss≤59,0≤p,q≤1000。

对于 100%的数据:0≤hh,min,ss≤1e6​​,0≤p,q≤1e8​​。

思路:把结束时刻算出来,再比个大小,挺简单的,就是别忘了换long long,还有就是注意是小于号。

AC代码:

#include<iostream>
#include<cstdio>
using namespace std;
int main(){
//    freopen("cook.in","r",stdin);
//    freopen("cook.out","w",stdout);
    long long a,b,c,d,e,f,q,p;
    scanf("%d:%d:%d",&a,&b,&c);
    scanf("%d:%d:%d",&d,&e,&f);
    scanf("%d%d",&p,&q);
    long long t1=a*3600+b*60+c+q+p;
    long long t2=d*3600+e*60+f;
    if(t1<t2){
        printf("Yes");
    }
    else{
        printf("No");
    }
//    fclose(stdin);
//    fclose(stdout);
    return 0;
}

 T2(criterion):

问题描述

给定一个长度为 n 的数组S ,其中包含S​1​​,S​2​​,⋯,S​n​​。

定义数组 S 的评价标准为:最大值-最小值

小可同学觉得问题过于简单。然后定义了一种操作:给定一个操作值 k,然后任意从数组中选择一个数字x,可以将数字 x 加上 k,或者减去 k,之后得到一个新的数组,并使得新数组的评价标准最小。最终输出最小的评价标准。

输入格式

输入第一行包含两个整数 n,k 。

第二行输入数组 S,总共 n 个整数,使用空格分开。

输出格式

输出一行,包含一个整数,表示操作后最小的评价标准。

输入样例
 
  1. 5 114
  2. 19 19 810 114 514
输出样例
 
  1. 677
数据描述

对于 40% 的数据:2≤n≤100,0≤Si,K≤1000

对于 100%的数据:2≤n≤10e6​​,0≤∣S​i​​∣,∣k∣≤1e​8​​。

思路:当时看的这个题的时候,就想到用嵌套循环,算完时间复杂度后就没有思路了。赛后才发现考虑2~n-1就行了。但还是不会写。

T3(buy):

问题描述

小可对达达真的是真爱!

小可为了体现对达达的爱,特意要为即将下班的达达做一顿丰富的晚饭!

做饭之前需要先购买足够的新鲜的食材,小可来到了超市。

小可列了一个购买清单,总共有 nn 个食材需要购买,在超市中第 ii 个食材的价格是 viv​i​​。

今天超市正在进行促销活动,每满两个商品,都可以进行促销活动,使用两个商品中最高价格购买当前这两件商品。

为了节省金钱,小可还在线购买了 k张超市折扣券,每两件商品可以使用一张折扣券,使用两个商品中最低价格购买当前这两件商品。

注意:商品不能重复参加活动。

请问小可购买清单中所有物品都购买后,最低花费多少元。

输入格式

第一行输入两个整数 n,kn,k,含义如题所示。

第二行输入 nn 个整数 viv​i​​,数字以空格分隔,表示每个食材价格。

输出格式

输出一行包含一个整数,表示小可购买清单中所有物品都购买后,最低花费多少元。

输入样例1
 
  1. 4 1
  2. 1 2 3 4
输出样例1
 
  1. 4
输入样例2
 
  1. 10 2
  2. 1 3 2 4 7 8 9 6 3 8
输出样例2
 
  1. 20
数据描述

对于 40% 的数据:1≤n≤100,0≤k≤1,0≤vi≤100

对于 100%的数据:1≤n≤1e6,0≤k≤1e5,0≤vi≤1e6

思路:先给序列排个序,然后循环K次,然后双指针扫描一下。但没做出来。

AC代码:
 

#include<iostream>
#include<cstdio>
#include<iostream>
using namespace std;
int a[1000001];
int main(){
//    freopen("buy.in","r",stdin);
//    freopen("buy.out","w",stdout);
    int k,n;
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;++i){
    	scanf("%d",a+i);
	}
	sort(a+1,a+1+n);
	long long sum=0;
	for(int i=1;i<=k;++i){
		sum+=a[i];
	}
	for(int i=n-k;i>k;i-=2){
		sum+=a[i]; 
	}
	printf("%lld",sum);
//	fclose(stdin);
//	fclose(stdout);
    return 0;
}

T4:

问题描述

吃面包要配果酱

吃薯条要配番茄酱

。。。

达达发现,小可准备的这些美食中,很多食物搭配起来吃最美味了!

小可为了让达达吃起来最顺利,已经给食物提前进行了标记,标记分为两种:大写字母 和 ?,相同大写字母表示两个食物搭配起来吃最美味,?则表示搭配任何一个食物吃都非常美味,但是达达有习惯,一旦使用当前这种食物搭配另一个食物,达达就不会再去搭配其他食物吃,也就是说每个?确定与某个食物搭配后,则不能再与其他食物搭配食用。

现在请问小可制作的饭菜中最多有多少种不同的搭配。

注意:

不同的搭配表示,字符相等,但是位置不同。

形式化的讲,给定一个由大写字母?构成的字符串 ss ,在字符串中存在 l,rl,r 满足 l<rl<r 且 s[l]==s[r]s[l]==s[r],则表示一种美味搭配。找出最多的不同的搭配,当 ll 不同或 rr 不同,就表示一种不同搭配。

输入格式

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

然后对于每组测试数据,输入一个字符串ss,含义如题所示。

输出格式

对于每组测试数据,输出一个整数,表示不同的搭配数量。

输入样例
 
  1. 4
  2. ?A?
  3. ABCDBDABCDBA
  4. ABCD?ACNBADADA
  5. ERTETHD?ERY?ERHDFS?
  6. SZD?S
输出样例
 
  1. 3
  2. 13
  3. 20
  4. 27
数据描述

假设 LL 表示字符串 ss 的长度。

对于 30%的数据,所有的 ss 中都不包含 ? ,1≤L≤1E3

对于 100%的数据,1≤T≤10,1≤L≤1E6

思路:开桶标记,最后加上“?”,但不会。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值