竞赛传送门: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个。
#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;
}