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

Hasana ·
更新时间:2024-09-20
· 757 次阅读

竞赛传送门:https://ac.nowcoder.com/acm/contest/5278

A.组队比赛(签到题) 题目大意:

给你四个数字,两两组合,问怎么样组合能使得两组的绝对值的差最小。

解题思路:

排序一下,中间的两个为一组,最大和最小的为另一组。

AC代码: #include #define PI 3.141592653589793238462643383279 using namespace std; typedef long long ll; int main() { int a[5]={0}; for(int i=0;i>a[i]; } sort(a,a+4); int x=a[1]+a[2]; int y=a[0]+a[3]; int ans=abs(x-y); cout<<ans<<endl; return 0; } B.每日一报(多关键字结构体排序) 题目大意:

一个结构体中有日期,学号,体温三个值,让你对体温异常(不低于 38.0 摄氏度)的报送消息进行整理后向上级上报备案。具体整理规则如下:将报送日期作为第一关键字降序,将体温作为第二关键字降序,将学号作为第三关键字升序排序。

解题思路:

按照关键字对结构体定义排序即可,**注意体温异常的人数可能为0,此时应该只输出0!!**弱智的错误wa了5次,也是没谁了!!

AC代码: #include #define PI 3.141592653589793238462643383279 using namespace std; typedef long long ll; struct node { ll num; ll date; double tem; }a[105],b[105]; bool cmp(struct node a,struct node b) { if(a.date>b.date) return true; else { if(a.date==b.date) { if(a.tem>b.tem) return true; else { if(a.tem==b.tem) { if(a.num>n; int m=0; for(int i=0;i=38.0) { b[m].date=a[i].date; b[m].num=a[i].num; b[m].tem=a[i].tem; m++; } } sort(b,b+m,cmp); cout<<m<<endl; if(m!=0) { for(int i=0;i<m;i++) { printf("%lld %lld %.1lf\n",b[i].date,b[i].num,b[i].tem); } } return 0; } C.最长非公共子序列(思维) 题目大意:

给你两个字符串,问你这两个字符串的最长非公共子序列的长度是多少。
在这里插入图片描述

解题思路:

判断两个字符串是否完全相同,如果是的话输出-1,不是的话输出较长的字符串的长度即可。因为较长的字符串一定是它的子序列而非较短的字符串的子序列。

AC代码: #include #define PI 3.141592653589793238462643383279 using namespace std; typedef long long ll; int main() { string a,b; cin>>a; cin>>b; ll lena=a.size(); ll lenb=b.size(); if(lena==lenb) { if(a==b) cout<<-1<<endl; else cout<<lena<<endl; } else cout<<max(lena,lenb)<<endl; return 0; } D.最大字符集(思维) 题目大意:

在这里插入图片描述

解题思路:

n=1和n=2的时候特判,直接输出对应的情况即可。n>2时输出101,1001,10001,10000,……即可,因为这样前面的永远不可能是后面的字串,同理,010,0110,01110……也是可以的。
n>2时对应的串的数量时n-1个。

AC代码: #include #define PI 3.141592653589793238462643383279 using namespace std; typedef long long ll; int main() { int n=0; cin>>n; if(n==1) { cout<<1<<endl; cout<<1<<endl; } if(n==2) { cout<<2<<endl; cout<<0<<endl; cout<<11<2) { cout<<n-1<<endl; for(int i=0;i<=n-2;i++) { cout<<1; for(int j=0;j<i;j++) cout<<0; cout<<1<<endl; } } return 0; } E.美味的序列(思维+找规律) 题目描述:

在这里插入图片描述

解题思路:

通过举例推断可以判断出不管怎么吃其实结果是一样的,结果均是原美味值之和减去(n-1)的阶乘,找到规律后其实就很简单。注意开long long,小心爆int。

AC代码: #include #define PI 3.141592653589793238462643383279 using namespace std; typedef long long ll; int main() { int n=0; cin>>n; static int a[100005]={0}; ll ans=0,xx=0; for(int i=0;i<n;i++) { scanf("%d",&a[i]); ans+=a[i]; } for(int i=1;i<=n-1;i++) { xx+=i; } ans-=xx; cout<<ans<<endl; } F.日期小助手(暴力) 题目描述:

给你一个日期,问你下一个即将到来的母亲节或者父亲节的日期,注意如果节日时当天的话不算,也要回答下一个。

解题思路:

分析给出的日期,看它在母亲节之前,母亲节父亲节之间还是父亲节之后。母亲节之前的话输出今年的母亲节日期,之间的话输出今年父亲节的日期,父亲节之后输出明年母亲节的日期。接下来就是根据年份是否为闰年再判断当年的母亲节,父亲节在几号。同时注意调整输出格式!!!1st,2nd,3rd,4th……

另外感谢AaronChang提供的一个基姆拉尔森日期公式计算方式。他的代码我放到这里https://paste.ubuntu.com/p/HT7YH2zvNk/?tdsourcetag=s_pctim_aiomsg

AC代码: #include #define PI 3.141592653589793238462643383279 using namespace std; typedef long long ll; int motherday(int year){ int day,s=0,monthday; for(int i=1900;i<=year;i++) if((i%400==0)||((i%100!=0)&&(i%4==0)))s=s+1; day=(((year-1899)*365+s)-(31+30+31+31+30+31+30+31))%7; if(day==7) monthday=14; else monthday=14-day; return monthday; } int fatherday(int year){ int day,s=0,fathday; for(int i=1900;i>n; while(n--){ int year,month,day,k; int flag=0,ff=0; scanf("%d%d%d",&year,&month,&day); if((month<5)||(month==5 && day=motherday(year))||(month==6 && day=7)||(month==6 && day>=fatherday(year))) { k=motherday(year+1); flag=3; } if(k==1||k==21||k==31) ff=1; if(k==2||k==22) ff=2; if(k==3||k==23) ff=3; if(flag==1) { if(ff==0) printf("Mother's Day: May %dth, %d\n",k,year); if(ff==1) printf("Mother's Day: May %dst, %d\n",k,year); if(ff==2) printf("Mother's Day: May %dnd, %d\n",k,year); if(ff==3) printf("Mother's Day: May %drd, %d\n",k,year); } if(flag==2) { if(ff==0) printf("Father's Day: June %dth, %d\n",k,year); if(ff==1) printf("Father's Day: June %dst, %d\n",k,year); if(ff==2) printf("Father's Day: June %dnd, %d\n",k,year); if(ff==3) printf("Father's Day: June %drd, %d\n",k,year); } if(flag==3) { if(ff==0) printf("Mother's Day: May %dth, %d\n",k,year+1); if(ff==1) printf("Mother's Day: May %dst, %d\n",k,year+1); if(ff==2) printf("Mother's Day: May %dnd, %d\n",k,year+1); if(ff==3) printf("Mother's Day: May %drd, %d\n",k,year+1); } } return 0; }
作者:Friends.



讯飞 程序设计 程序 大学 科大讯飞

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章