西邮第二届新生赛


A、永远的聪明王

在这里插入图片描述
Sample Input 1
4
语文 9
数学 56
英语 23
物理 7
Sample Output 1
物理 语文 英语 数学

Sample Input 2
5
化学 156
C语言 45665
工图 55
高数 985
Python 165
Sample Output 2
工图 化学 Python 高数 C语言

#include<stdio.h>
#include<stdlib.h>  //qsort所需头文件
int cmp(const void *p1,const void *p2);
struct Node{
    char s[101];
    int a;
}node[1000000];
int main(void)
{
    int n;
    scanf("%d",&n);
    int i;
    for(i=0;i<n;i++){
        scanf("%s %d",node[i].s,&node[i].a);
    }
    qsort(node,n,sizeof(node[0]),cmp);  
    for(i=0;i<n;i++){
        printf("%s ",node[i].s);  //输出相应科目
    }
    return 0;
}
int cmp(const void *p1,const void *p2)
{
    struct Node *m=(struct Node*)p1;
    struct Node *n=(struct Node*)p2;
    return m->a-n->a;    //根据每科所需时间排序
}

C、矩阵求和

在这里插入图片描述
Sample Input 1
3 3
1 2 3
4 5 6
7 8 9
1
1 1 2 2 2 2 3 3

Sample Output 1
35

#include<stdio.h>
#include<stdlib.h>
int cmp(const void *p1,const void *p2);
int main(void)
{
    int m,n;
    scanf("%d%d",&n,&m);
    int i,j;
    int q;
    long long a[2000][2000]={0};
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            scanf("%lld",&a[i][j]);
            a[i][j]=a[i-1][j]+a[i][j-1]+a[i][j]-a[i-1][j-1];
        }
    }
    scanf("%d",&q);
    while(q--){
        int x1,x2,x3,x4,y1,y2,y3,y4;
        scanf("%d%d%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);
        int num1[4],num2[4];  
        num1[0]=x1,num1[1]=x2,num1[2]=x3,num1[3]=x4;
        num2[0]=y1,num2[1]=y2,num2[2]=y3,num2[3]=y4;
        qsort(num1,4,sizeof(int),cmp);
        qsort(num2,4,sizeof(int),cmp);  //排序后可知相交矩形的坐标
        long long sum=0;  //sum的类型需要注意
        if(x3>x2||y3>y2||x1>x4||y1>y4)  //若不相交
        sum=a[x2][y2]-(a[x1-1][y2]+a[x2][y1-1])+a[x1-1][y1-1]
            +a[x4][y4]-(a[x3-1][y4]+a[x4][y3-1])+a[x3-1][y3-1];
        else  //相交
            sum=a[x2][y2]-(a[x1-1][y2]+a[x2][y1-1])+a[x1-1][y1-1]
                +a[x4][y4]-(a[x3-1][y4]+a[x4][y3-1])+a[x3-1][y3-1]
                -(a[num1[2]][num2[2]]-(a[num1[2]][num2[1]-1]+a[num1[1]-1][num2[2]])+a[num1[1]-1][num2[1]-1]);
                //用num数组存储的坐标获得相交矩形,并减去
        printf("%lld\n",sum);
    }
    return 0;
}
int cmp(const void *p1,const void *p2)
{
    return *(int*)p1-*(int*)p2;
}

F、菊花侠大战桃花怪

在这里插入图片描述
Sample Input 1
5

Sample Output 1
Win

Hint
若有5堆宝石,菊花侠可以先选择x=4,他拿第四堆的同时也得拿第二堆、第一堆,还剩第三堆和第五堆,桃花怪只能拿第三堆或者第五堆,然后菊花侠拿剩下的一堆,菊花侠拿完,因此菊花侠获胜,输出Win。

此题为博弈论题,可通过反证法证明先手必胜。因此直接输出Win即可

#include<stdio.h>
int main(){
	printf("Win");
	return 0;
}

I、小植哥哥の好奇

在这里插入图片描述
Sample Input 1
5

Sample Output 1
1 4

Hint
小植哥哥悄悄提醒你学妹最多有 2^40个学妹(学妹好多,小植哥哥好高兴(小植哥哥:好耶!~))。

经分析可知,最后站起来的编号一定为平方数(因数有奇数个)

#include<stdio.h>
int main(void)
{
    long long n;  //此处注意类型
    scanf("%lld",&n);
    long long i;
    for(i=1;i*i<=n;i++){
        printf("%lld ",i*i);
    }
    return 0;
}

J、Time Management

在这里插入图片描述
Sample Input 1
5
2 4
1 12
4 5
7 10
7 8

Sample Output 1
3

思路:将完成时间按先后顺序排序,再判断开始时间是否重叠

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int cmp(const void *p1,const void *p2);
struct Node{
    int a;//开始时间
    int b;//结束时间
}node[50000];
int main(void)
{
    int n;
    scanf("%d",&n);
    int i;
    for(i=0;i<n;i++){
        scanf("%d%d",&node[i].a,&node[i].b);
    }
    qsort(node,n,sizeof(node[0]),cmp);
    int cnt=0;  //最终过题数
    int time=0;  //时间初始化为0
    for(i=0;i<n;i++){
        if(node[i].a>=time){
            time=node[i].b;
            cnt++;
        }
    }
    printf("%d",cnt);
    return 0;
}
int cmp(const void *p1,const void *p2)
{
    struct Node *m=(struct Node*)p1;
    struct Node *n=(struct Node*)p2;
    return m->b-n->b;    //根据结束时间排序
}

K、小布特烦恼

在这里插入图片描述
Sample Input 1
3
5
5 3 2 1 4
6
2 2 2 2 2 2
2
2 1

Sample Output 1
YES
YES
NO

思维题:n*(n-1)/2的值为冒泡排序的最大次数,因此直接判断是否为非单调递减

#include<stdio.h>
int main(void)
{
    int t;
    int a[50000];
    int n,i;
    scanf("%d",&t);
    while(t--){
        int flag=0;  
        scanf("%d",&n);
        for(i=0;i<n;i++){
            scanf("%d",&a[i]);
        }
        for(i=0;i<n-1;i++){
            if(a[i]<=a[i+1]){
                flag=1;    //如果有一项为递增,flag=1
             	break}
        }
        if(flag)
            printf("YES\n");
        else printf("NO\n");  //别漏回车
    }
    return 0;
}

L、菜学长的糖糖

在这里插入图片描述
Sample Input 1
7 1 1 1 1 1 1 2

Sample Output 1
2

思维题:直接对所有数据进行异或运算(两两抵消)

#include<stdio.h>
int main(void)
{
    int n;
    scanf("%d",&n);
    int i,a,sum;
    for(i=0;i<n;i++){
        scanf("%d",&a);
        if(i==0)
            sum=a;  //这里注意让sum一开始等于第一项
        else sum=sum^a;
    }
    printf("%d",sum);
    return 0;
}

M、水题

在这里插入图片描述
Sample Input 1
6
4 0
5 8
0 1000000
0 0
1 0
1000000 1000000

Sample Output 1
0
3
1000000
0
1
0

思维题:经分析,可分为两种情况:
1.n<=k,直接输出n。
2.n>k,如果n-k为奇数,结果为1;反之,结果为0

#include<stdio.h>
int main(void)
{
    int n,t,k;
    scanf("%d",&t);
    while(t--){
        scanf("%d%d",&n,&k);
        if(n<=k)
            printf("%d\n",k-n);
        else{
            if((n-k)&1){
                printf("1\n");
            }
            else printf("0\n");  //别漏掉回车
        }
    }
    return 0;
}

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值