04.18 “科大讯飞杯”第18届上海大学程序设计联赛春季赛暨高校网络友谊赛
作者:互联网
A
题意:计算四个数的最小差值,两两一组
代码
#include<iostream> #include<algorithm> #include<cstdio> #include<cmath> #include<cstring> using namespace std; int main(){ int a[4]; scanf("%d %d %d %d",&a[0],&a[1],&a[2],&a[3]); sort(a,a+4); printf("%d",abs(a[0]+a[3]-a[1]-a[2])); }
B
题意:为了预防新型冠状病毒的侵袭,学校组织学生进行每日一报——自 2020 年 1 月 30 日 起至今,每位同学都必须上报自己的身体状况。为了简化问题,我们规定每日一报仅包含以下信息:
- 报送日期:固定 8 位十进制数,格式为 YYYYMMDD ,如 20200312 代表 2020 年 3 月 12 日;
- 学号:固定 8 位十进制数,不必追溯其具体含义,如 17122490;
- 体温:保留一位小数的浮点数,单位为摄氏度,介于 35.0 至 45.0 之间,如 37.1。
作为学校数据库负责人,Lemon 需要对体温异常(不低于 38.0 摄氏度)的报送消息进行整理后向上级上报备案。具体整理规则如下:将报送日期作为第一关键字降序,将体温作为第二关键字降序,将学号作为第三关键字升序排序。即在整理完成后,任意两条报送记录都有如下关系:
- 报送日期不一致的,则日期较近的在上,日期较久远的在下;
- 报送日期一致体温不一致的,则体温高的在上,体温低的在下;
- 报送日期和体温都一致的,则学号小的在上,学号大的在下。
思路:结构体排序
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef struct 4 { 5 int day,num;double tem; 6 }mem; 7 bool cmp(mem x,mem y) 8 { 9 if(x.day!=y.day) 10 return x.day>y.day; 11 if(x.tem!=y.tem) 12 return x.tem>y.tem; 13 if(x.num!=y.num) 14 return x.num<y.num; 15 } 16 int main() 17 { 18 int n; 19 cin>>n; 20 mem s[n]; 21 int i,j,k; 22 int a,b; 23 double c; 24 int cnt = 0; 25 for(i = 0;i < n;i++) 26 { 27 int repeat = 0; 28 cin>>a>>b>>c; 29 if(a>=20200130&&a<=20200418&&c>=38.0) 30 { 31 for(j = 0;j < cnt;j++) 32 { 33 if(s[j].day==a&& s[j].num==b) 34 { 35 repeat = 1; 36 break; 37 } 38 } 39 if(repeat) 40 { 41 continue; 42 }else 43 { 44 s[cnt].day = a;s[cnt].num = b;s[cnt].tem = c; 45 cnt++; 46 } 47 } 48 } 49 cout<<cnt<<endl; 50 sort(s,s+cnt,cmp); 51 for(i = 0;i < cnt;i++) 52 printf("%d %d %.1lf\n",s[i].day,s[i].num,s[i].tem); 53 54 55 }
C
题目:序列 c 是 s1s_1s1 和 s2s_2s2 的非公共子序列当且仅当它满足以下条件中的任何一个:
- c 是 s1s_1s1 的子序列但不是 s2s_2s2 的子序列;
- c 是 s2s_2s2 的子序列但不是 s1s_1s1 的子序列。
s1s_1s1 和 s2s_2s2 的非公共子序列可能有很多,你只需要求出其中长度最长的非公共子序列的长度。
1 #include<iostream> 2 #include<algorithm> 3 #include<cstdio> 4 #include<cmath> 5 #include<cstring> 6 using namespace std; 7 int main(){ 8 char a[5010],b[5010]; 9 int lena,lenb; 10 gets(a); 11 gets(b); 12 lena=strlen(a); 13 lenb=strlen(b); 14 if(lena!=lenb){ 15 printf("%d",max(lena,lenb)); 16 }else{ 17 int flag=0; 18 for(int i=0;i<lena;i++){ 19 if(a[i]!=b[i]){ 20 flag=1; 21 } 22 } 23 if(flag==0){ 24 printf("-1"); 25 }else{ 26 printf("%d",lena); 27 } 28 } 29 30 31 }
D
题目:用01组成字符串,每个不是其他的子字符串,需要最多构造几次长度达到所给长度
思路:构造11,101,1001,10001.......
1 #include<iostream> 2 #include<algorithm> 3 #include<cstdio> 4 #include<cmath> 5 #include<cstring> 6 using namespace std; 7 int main(){ 8 int k; 9 scanf("%d",&k); 10 if(k==1){ 11 printf("1\n"); 12 printf("1\n"); 13 }else if(k==2){ 14 printf("2\n"); 15 printf("1\n"); 16 printf("00\n"); 17 }else{ 18 printf("%d\n",k-1); 19 int m=2; 20 for(int i=0;i<k-1;i++){ 21 printf("1"); 22 for(int i=0;i<m-2;i++){ 23 printf("0"); 24 } 25 m++; 26 printf("1\n"); 27 28 } 29 } 30 }
E
题目:现在,他可以从头或从尾部花费 1 秒吃掉这个序列的一个元素,并获得这个元素此时的美味度。但是,令他头疼的是,每经过 1秒,所有还没有被吃的部分的美味度会下降 1。
1 #include<bits/stdc++.h> 2 using namespace std; 3 bool cmp(int a,int b){ 4 return a>b; 5 } 6 long long jianshao(int n) 7 { 8 9 long long i,sum = 0; 10 for(i = 1;i < n;i++) 11 sum+=i; 12 return sum; 13 } 14 int main() 15 { 16 int n; 17 cin>>n; 18 int a[n]; 19 int i,j; 20 long long sum = 0; 21 for(i = 0;i < n;i++) 22 { 23 cin>>a[i]; 24 sum+=a[i]; 25 } 26 sum-=jianshao(n); 27 cout<<sum; 28 }
标签:tem,int,18,printf,飞杯,序列,友谊赛,include,day 来源: https://www.cnblogs.com/bonel/p/12771933.html