热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

“科大讯飞杯”第18届上海大学程序设计联赛春季赛暨高校网络友谊赛补题报告2020.4.20

A组队比赛Compute,Cubercsl,SuperSodaSea,Ybmj准备组队参加科大讯飞赞助的CrossFire比赛。科大讯飞股份有限公司成立于1999年,是亚太地区

A 组队比赛


Compute, Cubercsl, SuperSodaSea, Ybmj 准备组队参加 "科大讯飞" 赞助的 CrossFire 比赛。
科大讯飞股份有限公司成立于1999年,是亚太地区知名的智能语音和人工智能上市企业。自成立以来,长期从事语音及语言、自然语言理解、机器学习推理及自主学习等核心技术研究并保持了国际前沿技术水平;积极推动人工智能产品研发和行业应用落地,致力让机器"能听会说,能理解会思考",用人工智能建设美好世界。
这场比赛需要两人一队组队参加,他们不知道怎么分组。已知他们的 CrossFire 分数分别为 a, b, c, d,现在想要把他们两两分为一队,使得他们的实力比较平均,也就是两队的实力差尽量小。
这里定义两队的实力差为每队的 CrossFire 分数之和的差值,现在他们想要知道这个实力差最小是多少。

输入描述:

仅一行,包含四个整数 a, b, c, d (1≤a,b,c,d≤36811 \leq a, b, c, d \leq 36811a,b,c,d3681),中间以空格分隔,分别表示四个人的 CrossFire 分数。

输出描述:

在一行输出一个整数,表示两个队伍实力差的最小值。


示例1



输入


2 1 3 4


输出




0






示例2



输入


2263 2110 2172 2109




输出


90
题解:这题就是将4个数分成两组,然后考虑如何分能得到两组之差最小值。
用sort排序然后abs(a[3]+a[0]-a[1]-a[2])就好

#include
using namespace std;
typedef
long long ll;
int main()
{
int a[4];
for(int i=0;i<4;i++)
{
cin
>>a[i];
}
sort(a,a
+4);
int s1=a[0]+a[3];
int s2=a[1]+a[2];
int ans=abs(s1-s2);
cout
<<ans;
return 0;
}


 

B 每日一报


为了预防新型冠状病毒的侵袭,学校组织学生进行每日一报——自 2020 年 1 月 30 日 起至今,每位同学都必须上报自己的身体状况。为了简化问题,我们规定每日一报仅包含以下信息:


  • 报送日期:固定 8 位十进制数,格式为 YYYYMMDD ,如 20200312 代表 2020 年 3 月 12 日

  • 学号:固定 8 位十进制数,不必追溯其具体含义,如 17122490

  • 体温:保留一位小数的浮点数,单位为摄氏度,介于 35.0 至 45.0 之间,如 37.1。


作为学校数据库负责人,Lemon 需要对体温异常(不低于 38.0 摄氏度)的报送消息进行整理后向上级上报备案。具体整理规则如下:将报送日期作为第一关键字降序,将体温作为第二关键字降序,将学号作为第三关键字升序排序。即在整理完成后,任意两条报送记录都有如下关系:


  • 报送日期不一致的,则日期较近的在上,日期较久远的在下;

  • 报送日期一致体温不一致的,则体温高的在上,体温低的在下;

  • 报送日期和体温都一致的,则学号小的在上,学号大的在下。


你能帮助 Lemon 完成这个任务吗?

输入描述:

第一行包含一个整数 n (1≤n≤1001 \leq n \leq 1001n100),表示需要处理的报送记录。
接下来 n 行,每行代表一条报送记录。
每一条记录包含两个整数和一个浮点数,中间空格分隔,分别表示报送日期、学号和体温,格式如题目描述中所述
输入保证所有的报送日期是 2020 年 1 月 30 日至今(2020 年 4 月 18 日)的合法日期,同一个学号不会在同一天进行多次报送。

输出描述:

第一行输出一个整数 m,表示需要上报备案的记录数量。
接下来 m 行,每行为一条记录。
记录的顺序应符合题目要求,记录格式应与输入格式中所述记录格式保持一致。


示例1



输入


5
20200229 17122490 37.0
20200301 17122490 38.4
20200229 17122640 39.0
20200301 17122640 38.4
20200301 16122138 38.1




输出


4
20200301 17122490 38.4
20200301 17122640 38.4
20200301 16122138 38.1
20200229 17122640 39.0
题解:就是算出超过38°的个数,并按要求排序,先按时间,时间相等按度数,度数相等按学号,自己写一个cmp就好

#include
using namespace std;
typedef
long long ll;
struct f
{
int day;
int num;
float tem;
};
bool cmp(f a,f b)
{
if(a.day!=b.day)
{
return a.day>b.day;
}
else if(a.tem!=b.tem)
{
return a.tem>b.tem;
}
else
{
return a.num<b.num;
}
}
int main()
{
int n,i,j,k;
cin
>>n;
int ans=0;
struct f a[200];
for(i=0;i)
{
cin>>a[i].day>>a[i].num>>a[i].tem;
if(a[i].tem>=38.0)
{
ans
++;
}
}
sort(a,a
+n,cmp);
cout
<endl;
cout<<fixed<1);
int p=0;
for(i=0;i)
{
if(a[i].tem>=38.0)
{
cout
<<<endl;
p++;
}
if(p==ans)
{
break;
}
}
return 0;
}

c:最长非公共子序列
Lemon 丢给你两个字母序列 s1s_1s1?s2s_2s2? ,并无情地交给了你一个奇怪的任务——求最长非公共子序列。

序列 a 是 b 的子序列,当且仅当从 b 中删除一些元素(可以是零个或所有)能得到 a。
例如:
我们可以通过从 "abcde" 中删除 "b" 和 "d" 得到 "ace",因此 "ace" 是 "abcde" 的子序列。
同理 "abcde","e" 和 空串 都是 "abcde" 的子序列;

但 "abdc" 不是 "abcde" 的子序列。

序列 c 是 s1s_1s1?s2s_2s2? 的非公共子序列当且仅当它满足以下条件中的任何一个:


  • c 是 s1s_1s1? 的子序列但不是 s2s_2s2? 的子序列;

  • c 是 s2s_2s2? 的子序列但不是 s1s_1s1? 的子序列。


s1s_1s1?s2s_2s2? 的非公共子序列可能有很多,你只需要求出其中长度最长的非公共子序列的长度。


输入描述:

第一行包含一个字符串 s1s_1s1? ,第二行包含一个字符串 s2s_2s2?。 (1≤∣s1∣,∣s2∣≤50001 \leq |s_1|, |s_2| \leq 50001s1?,s2?5000)
输入保证 s1s_1s1?s2s_2s2? 均只包含小写字母。


输出描述:

在一行输出一个整数,表示最长非公共子序列的长度。
特别地,如果不存在非公共子序列,输出 -1 。



示例1



输入


aba
abc




输出


3






示例2



输入


lemon
lemon




输出


-1




题解:找出最长的非公共子序列是多大,如果这两个字符串长度不同但是内容不相等,那最长的子序列肯定两个字符串中更长的那个,
如果长度内容完全相等,那就没有非公共的子序列就输出-1,如果长度相等内容不相等,那最长的非公共子序列就是他们的长度,因为他们两个不相等


#include//stdc++.h>
using namespace std;
typedef
long long ll;
int main()
{
string s1,s2;
int len1,len2;
cin
>>s1>>s2;
len1
=s1.size();
len2
=s2.size();
if(len1!=len2)
{
cout
<<max(len1,len2);
}
else
{
if(s1==s2)
{
cout
<<-1;
}
else
{
cout
<<len1;
}
}
return 0;
}

 D.最大字符集


Cubercsl 很喜欢 01 字符串,就像“她喜欢大海”,这一天他想送她一个由 01 字符串组成的集合。

他自然是希望这个集合越多样化越大越好。所以他希望这个集合满足以下条件。



  • 每个字符串由 0 和 1 组成。

  • 每个字符串长度在 1 到 n 之间,且两两长度不同。

  • 集合中任何一个字符串都不是其他字符串的子串。


请你帮他找到满足他要求的最大的集合。
字符串 a 是 b 的子串当且仅当从 b 的头部和尾部删除一些字符(可以是零个或者所有)能得到的 a。



输入描述:

仅一行,包含一个整数 n(1≤n≤3001 \leq n \leq 3001n300)

输出描述:

第一行输出这个集合的大小 k。
接下来 k 行每行输出一个 01 字符串,表示这个集合的一个元素。
答案不唯一,任何符合要求的答案都会被判为正确。


示例1



输入


1




输出


1
1






示例2



输入


5




输出


4
00
110
1010
11111




 题解:这题主要就是找字串不同的有几种,其实就是一个规律题,列几个例子就会发现1的时候是1或者0只有一种,2的时候是0,和11
其他情况就是在00里面加个1就好,3的时候就是00 010,4的时候是00 010 0110

#include
using namespace std;
int main() {
int n,t=1;
string a="00";
cin
>>n;
if(n==1) {
cout
<<1<<endl;
cout
<<"1"<<endl;
}
else if(n==2) {
cout
<<2<<endl;
cout
<<"1"<<endl;
cout
<<"00"<<endl;
}
else {
cout
<1<<endl;
cout
<endl;
while(t!=n-1) {
a.insert(
1,"1");
cout
<endl;
t++;
}
}
}


E.美味的序列
链接:https://ac.nowcoder.com/acm/contest/5278/E
来源:牛客网


题目描述



Cubercsl 喜欢吃序列,所以这一天不知道谁送了他一个序列,他非常快乐,想把他吃完。
序列的每一段自然也有好吃与不好吃的分别,他用数字标识了每个部分的美味度(可能是负的)。
现在,他可以从头或从尾部花费 1 秒吃掉这个序列的一个元素,并获得这个元素此时的美味度。但是,令他头疼的是,每经过 1秒,所有还没有被吃的部分的美味度会下降 1。
现在 Cubercsl 想知道,如果他按照合理的顺序吃完这个序列,他能获得的最大的美味度的和是多少?

输入描述:

第一行包含一个整数 n (1≤n≤1051\leq n \leq 10 ^ 51n105) ,表示序列的长度。
第二行包含 n 个整数 a1,a2,…,ana_1, a_2 , \ldots ,a_na1?,a2?,,an? (0≤∣ai∣≤1090 \leq |a_i| \leq 10^90ai?109),中间以空格分隔,分别表示这个序列每一部分的美味度。

输出描述:

在一行输出一个整数,表示吃完这个序列能获得的最大美味度的和。


示例1



输入


3
3 2 3




输出


5






示例2



输入


1
-10




输出


-10





题解:每吃掉一个数,其他数都会减1,问最后你能吃掉的最大数是多少,一道规律题,你减去的数是固定的是n(n-1),然后把
所有值算出来-去要减去的数就ok了

#include
#include

#include

#include

using namespace std;
typedef
long long ll;
int a[100000+8];
int main()
{
ll i,j,k,n;
cin
>>n;
ll sum
=0;
for(i=0;i)
{
cin>>a[i];
sum
+=a[i];
}
ll s1
=0;
s1
=((1+n-1)*(n-1))/2;
cout
<s1;
return 0;
}

F.日期小助手

链接:https://ac.nowcoder.com/acm/contest/5278/F
来源:牛客网


作为一个关心父母的孩子,Compute 会在每年的母亲节和父亲节为父母准备礼物。可是粗心的他却不记得它们的具体日期了。
已知:母亲节在每年 5 月的第 2 个周日;父亲节在每年 6 月的第 3 个周日。
现在你需要告诉他,下一个(不包括当天)母亲节或父亲节是在什么时候。

输入描述:

第一行包含一个整数 T (T≤100T \leq 100T100),表示测试数据的组数。
对于每组数据,包含三个整数 y, m, d,中间以空格分隔,分别表示今天的年、月、日。
输入保证是一个在公元 2000 年 1 月 1 日 到 2100 年 12 月 31 日间的合法日期。

输出描述:

对于每组数据,在一行输出下一个需要准备礼物的节日和日期。格式参考样例输出。


示例1



输入


7
2000 1 1
2001 1 1
2002 1 1
2003 1 1
2020 1 1
2020 5 10
2020 6 21




输出


Mother‘s Day: May 14th, 2000
Mother‘s Day: May 13th, 2001
Mother‘s Day: May 12th, 2002
Mother‘s Day: May 11th, 2003
Mother‘s Day: May 10th, 2020
Father‘s Day: June 21st, 2020
Mother‘s Day: May 9th, 2021




题解:这题首先要知道2000年的的4月最后一天是星期几和5月最后一天是星期几,然后有个顺序就是第二年如果不是闰年就+1是闰年就+2,这样就可以

当年的父亲节和母亲节是什么时候,然后再进行判断下一个节日是母亲节还是父亲节,输出注意号数不同后面的字母也不同,我用map一个一个列出来- -。

#include
#include

#define N 10001
using namespace std;
int main(){
map
<int,string>mp;
mp[
1]="st";
mp[
2]="nd";
mp[
3]="rd";
mp[
4]="th";
mp[
5]="th";
mp[
6]="th";
mp[
7]="th";
mp[
8]="th";
mp[
9]="th";
mp[
10]="th";
mp[
11]="th";
mp[
12]="th";
mp[
13]="th";
mp[
14]="th";
mp[
15]="th";
mp[
16]="th";
mp[
17]="th";
mp[
18]="th";
mp[
19]="th";
mp[
20]="th";
mp[
21]="st";
mp[
22]="nd";
mp[
23]="rd";
mp[
24]="th";
mp[
25]="th";
mp[
26]="th";
mp[
27]="th";
mp[
28]="th";
mp[
29]="th";
mp[
30]="th";
mp[
31]="st";
mp[
32]="nd";
mp[
33]="rd";
mp[
34]="th";
mp[
35]="th";
mp[
36]="th";
mp[
37]="th";
mp[
38]="th";
mp[
39]="th";
mp[
40]="th";
int t,p,q,p1;
int year,month,day;
int flagm,flagf;
cin
>>t;
while(t--){
p
=5,q=1;
cin
>>year>>month>>day;
for(int i=2000;i<=year;i++){
if((i%4==0&&i%100!=0)||(i%400==0)){
p
=p+2;q=q+2;
}
else{
p
=p+1;q=q+1;
}
}
p
=p%7;q=q%7;
p1
=p;
for(int i=1;i<=31;i++){
p
++;
if(p/7==2){
flagm
=i;
break;
}
}
for(int i=1;i<=31;i++){
q
++;
if(q/7==3){
flagf
=i;
break;
}
}
if(month<5||(mOnth==5&&day<flagm)){
cout
<<"Mother‘s Day: May "<","<<" "<endl;
}
else if((mOnth==5&&day>=flagm)||(mOnth==6&&day<flagf)){
cout
<<"Father‘s Day: June "<","<<" "<endl;
}
else{
//cout<
year++;
if((year%4==0&&year%100!=0)||(year%400==0)){
p1
=p1+2;
}
else{
p1
++;
}
p1
=p1%7;
//cout<
for(int i=1;i<=30;i++){
p1
++;
if(p1/7==2){
flagm
=i;
break;
}
}
cout
<<"Mother‘s Day: May "<"
,"<<" "<endl;
}
}
return 0;
}

 

 





 





推荐阅读
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 本文内容为asp.net微信公众平台开发的目录汇总,包括数据库设计、多层架构框架搭建和入口实现、微信消息封装及反射赋值、关注事件、用户记录、回复文本消息、图文消息、服务搭建(接入)、自定义菜单等。同时提供了示例代码和相关的后台管理功能。内容涵盖了多个方面,适合综合运用。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了指针的概念以及在函数调用时使用指针作为参数的情况。指针存放的是变量的地址,通过指针可以修改指针所指的变量的值。然而,如果想要修改指针的指向,就需要使用指针的引用。文章还通过一个简单的示例代码解释了指针的引用的使用方法,并思考了在修改指针的指向后,取指针的输出结果。 ... [详细]
author-avatar
偽愛拋棄_514
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有