新生赛我会的题的题解

写在前面

难道不会真的有人以为我会写五篇吧?
祝大家圣诞节快乐。
祝大家平安夜快乐。
提前在祝大家元旦快乐。
提前祝大家春节快乐。

主要内容

新生赛我会的题的题解

下面正式开始

在这里插入图片描述

A题,这题真的是我觉得最简单的一道,就一个结构体排序,而且给的测试数据也不是那么的大,用桶排完全可以过
上代码

#include <stdio.h>
#include <string.h>
typedef struct M{
	int time;
	char s[100];
}m;
int main()
{
	int time,n,i;
	m sub[1000000];
	char s1[100];
	scanf("%d",&n);
	while(n--)
	{
		scanf("%s",s1);
		scanf("%d",&i);
		sub[i].time=66;
		strcpy(sub[i].s,s1);
	}
	for(n=0;n<1000000;n++){
		if(sub[n].time==66){
			printf("%s ",sub[n].s);
		}
	} 
} 

F题桃花侠大战菊花怪
在这里插入图片描述

这道题是一道博弈论思想的,亏我还专门学习了博弈论(指在学校的选修课上)当别人一点这是博弈论问题之后瞬间想通。这是一个完全信息动态博弈的模型,前提条件是双方都是非常聪明的,在题中给定的条件下,只要先手取绝对是先手胜利所以代码也是很简单

#include <stdio.h>
int main()
{
	long long int number;
	scanf("%lld",&number);
	printf("Win");
	return 0;
} 

在这里插入图片描述

I题这道题当时我做的时候用了一个特别大的数组模拟,结果就是开太大编译错误,开的太小段错误,我一下就给服了,结果没想到,这道题最终的答案也是非常简单的,只要他的全部因子个数是奇数个,他就会站着。那什么数字的因子会是奇数个呢?那就是平方数呢。

#include <stdio.h>
int main(){
	int n[1000]={0};
	long long int a,i,j;
	scanf("%lld",&a);
	for(i=1;i*i<=a;i++)
	{
		printf("%lld ",i*i);
	}
	return 0;
}

J题时间管理大师
在这里插入图片描述

这道题先把题按结束时间由小到大排序,然后就依次找到那些不重合的时间就行,刚开始想用冒泡懵一下的,在意料之中啊,超时了,那就拿快排排了再比较就行

#include <stdio.h>
typedef struct Ti{
	int start;
	int end;
}ti;
void quicksort(int left,int right,ti a[])
{
	int i,j,temp;
	ti t,t1;
	if(left > right)
	{
		return;
	}
	temp=a[left].end;
	t1=a[left];
	i=left;
	j=right;
	while(i!=j)
	{
		while(a[j].end>=temp&&i<j)
		{
			j--;
		}
		while(a[i].end<=temp&&i<j)
		{
			i++;
		}
		if(i<j)
		{
			t=a[i];
			a[i]=a[j];
			a[j]=t;
		}
	}
	a[left]=a[i];
	a[i]=t1;
	quicksort(left,i-1,a);
	quicksort(i+1,right,a);
}
int main()
{
	int number,i,j,cnt=1;
	ti time[50000],temp;
	scanf("%d",&number);
	for(i=0;i<number;i++)
	{
		scanf("%d%d",&time[i].start,&time[i].end);
	}
//	for(i=1;i<number;i++)
//	{
//		for(j=0;j<number-i;j++)
//		{
//			if(time[j].end>time[j+1].end)
//			{
//				temp=time[j];
//				time[j]=time[j+1];
//				time[j+1]=temp;
//			}
//		}
//	}
	quicksort(0,number-1,time);
	for(i=1,j=0;i<number;i++)
	{
		if(time[i].start<time[j].end)
		{
			continue;
		}
		else
		{
			j=i;
			cnt++;
		}
	}
	printf("%d",cnt);
	
	return 0;
} 

在这里插入图片描述
这道题我解决的很暴力,就是一个一个遍历,可能是我的智商太低的缘故。。。。。

#include <stdio.h>
int main()
{
	int n,a[1000],i;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	for(i=0;i<n-1;i++)
	{
		if(a[0]!=a[1])
		{
			printf("%d",a[0]);
			break;
		}
		if(a[i]!=a[i-1]&&a[i]!=a[i+1])
		{
			printf("%d",a[i]);
			break;
		}
	}
	if(i==n-1)
	{
		printf("%d",a[i]);
	} 
	return 0;
} 

在这里插入图片描述
这道题我真的读不懂他想让我干什么,什么方块咋咋咋,什么交换咋咋咋,不就是想让我判断一个数列·是否完全降序么,说的那么花里胡哨的。。

#include <stdio.h>
int main()
{
	int a[50001];
	int num,i,j,flag=1,number;
	scanf("%d",&number);
	while(number--)
	{
		scanf("%d",&num);
		for(i=0;i<num;i++)
		{
			scanf("%d",&a[i]);
		}
		for(i=0;i<num-1;i++)
		{
			if(a[i]<=a[i+1])
			{
				flag=0;
				break;
			}
		}
		if(flag==1)
		{
			printf("NO\n");
		}
		else
		{
			printf("YES\n");
		}
		flag=1;
	}
}

在这里插入图片描述
水题很水,但是没有想明白前还是不水,其实只需分两种情况,当n>k和n<k;前面大于后面时只需要判段两个是不是同奇或同偶,是的话输出0不是输出1就行;当后面大于前面,只需输出后面减前面就行。

#include <stdio.h>
#include <math.h>
int main()
{
	int num,n,k,x;
	scanf("%d",&num);
	while(num--)
	{
		scanf("%d%d",&n,&k);
		if(k>n)
		{
			printf("%d\n",k-n);	
		}
		else
		{
			if((k+n)%2==0)
            {
              printf("0\n");
            }
          	else
            {
              printf("1\n");
            }
		}
	}
} 

写在最后

其实新生赛的题是挺能引起人们思考的,他们之中的简单题需要你反复的思考,感觉打新生赛比高考还煎熬,一个小时过去了,连一道题都没有做出来,那种绝望感和无力感再也不想感受了,但是带给人的收获也有许多,最后感谢新生赛让我认清现实。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值