ccf代码暂存

目录

出现次数最多的数

ISBN号码

最大的矩形

称检测点查询

风险人群筛查

小明种苹果(续)

买菜



问题描述

试题编号:201312-1
试题名称:

出现次数最多的数

时间限制:1.0s
内存限制:256.0MB
问题描述:

问题描述

  给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。

输入格式

  输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。
  输入的第二行有n个整数s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相邻的数用空格分隔。

输出格式

  输出这n个次数中出现次数最多的数。如果这样的数有多个,输出其中最小的一个。

样例输入

6
10 1 10 20 30 20

样例输出

10

#include <stdio.h>
#include <string.h>
int main(){
    int n,s[10001],i,d;
    scanf("%d",&n);
    memset(s, 0, sizeof(s));
    for(i=0;i<n;i++){
        scanf("%d",&d);
        s[d]++;
    }
    int max=0;
    int index;
    for(i=10000;i>0;i--){
        if(max<=s[i]){
            max=s[i];
            index=i;
        }
    }
    printf("%d\n",index);
    return 0;
}

问题描述

试题编号:201312-2
试题名称:

ISBN号码

时间限制:1.0s
内存限制:256.0MB
问题描述:

问题描述

  每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。
  识别码的计算方法如下:
  首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,…,9,再求和,即0×1+6×2+……+2×9=158,然后取158 mod 11的结果4作为识别码。
  编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出是正确的ISBN号码。

输入格式

  输入只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)。

输出格式

  输出一行,假如输入的ISBN号码的识别码正确,那么输出“Right”,否则,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”)。

样例输入

0-670-82162-4

样例输出

Right

样例输入

0-670-82162-0

样例输出

0-670-82162-4

#include <stdio.h>
#include <string.h>
int main(){
    char s[14],c;
    int i,sum,j;
    while(scanf("%s",&s)!=EOF){
        sum=0;
        j=1;
        for(i=0;i<strlen(s)-1;i++){
            if(s[i]!= '-'){
                sum+=(j++)*(s[i]-'0');
            }
        }
        //printf("测试sum%d\n",sum);
        c=sum%11;
        if(c==10){
            c='X';
        }
        else 
            c=c+'0';
        //printf("测试%c\n",c);
        if(c==s[strlen(s)-1]){
            printf("Right\n");
        }
        else
        {
            for(i=0;i<strlen(s)-2;i++){
                printf("%c",s[i]);
            }
            printf("-%c\n",c);
        }
    }
    return 0;
}

 

问题描述

试题编号:201312-3
试题名称:

最大的矩形

时间限制:1.0s
内存限制:256.0MB
问题描述:

问题描述

  在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi。这n个矩形构成了一个直方图。例如,下图中六个矩形的高度就分别是3, 1, 6, 5, 2, 3。



  请找出能放在给定直方图里面积最大的矩形,它的边要与坐标轴平行。对于上面给出的例子,最大矩形如下图所示的阴影部分,面积是10。

输入格式

  第一行包含一个整数n,即矩形的数量(1 ≤ n ≤ 1000)。
  第二行包含n 个整数h1, h2, … , hn,相邻的数之间由空格分隔。(1 ≤ hi ≤ 10000)。hi是第i个矩形的高度。

输出格式

  输出一行,包含一个整数,即给定直方图内的最大矩形的面积。

样例输入

6
3 1 6 5 2 3

样例输出

10

#include <stdio.h>
#include <string.h>
int main(){
    int n,i,j,height;
    int a[1001];
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    int ans=0,area=0;
    for(i=0;i<n;i++){
        height=a[i];
        for(j=i;j<n;j++){
            if(height>a[j]){
                height=a[j];
            }
            ans=height*(j-i+1);
            if(area<ans){
                area=ans;
            }
        }
    }
    printf("%d\n",area);
    return 0;
}

 

问题描述

试题编号:202009-1
试题名称:

称检测点查询

时间限制:1.0s
内存限制:256.0MB
问题描述:

题目背景

2020 年 6 月 8 日,国务院联防联控机制发布《关于加快推进新冠病毒核酸检测的实施意见》,提出对“密切接触者”等八类重点人群“应检尽检”,其他人群“愿检尽检”。

问题描述

某市设有 n 个核酸检测点,编号从 1 到 n,其中 i 号检测点的位置可以表示为一个平面整数坐标 (xi,yi)。

为方便预约核酸检测,请根据市民所在位置 (X,Y),查询距其最近的三个检测点。
多个检测点距离相同时,编号较小的视为更近。

输入格式

输入共 n+1 行。

第一行包含用空格分隔的三个整数 n、X 和 Y,表示检测点总数和市民所在位置。

第二行到第 n+1 行依次输入 n 个检测点的坐标。第 i+1 行(1≤i≤n)包含用空格分隔的两个整数 xi 和 yi,表示 i 号检测点所在位置。

输出格式

输出共三行,按距离从近到远,依次输出距离该市民最近的三个检测点编号。

样例输入1

3 2 2
2 2
2 3
2 4

Data

样例输出1

1
2
3

Data

样例输入2

5 0 1
-1 0
0 0
1 0
0 2
-1 2

Data

样例输出2

2
4
1

Data

样例2解释

评测用例规模与约定

全部的测试点满足,3≤n≤200,所有坐标均为整数且绝对值不超过 1000。

提示

市民到第 i 号检测点的距离 Di 可由如下公式算出:

#include <stdio.h>
#include <string.h>
struct distance{
    int num;
    int x;
    int y;
    int far;
}d[100005],temp;
int main()
{
    int n,i,num=0,j,x,y;
    memset(d,0,sizeof(struct distance)*100005);
    scanf("%d %d %d",&n,&x,&y);
    for(i=0;i<n;i++){
        scanf("%d %d",&d[i].x,&d[i].y);
        d[i].num=i+1;
        d[i].far=(d[i].x-x)*(d[i].x-x)+(d[i].y-y)*(d[i].y-y);
    }
    for(i=0;i<n-1;i++){
        for(j=0;j<n-i-1;j++){
            if(d[j].far>d[j+1].far){
                temp=d[j];
                d[j]=d[j+1];
                d[j+1]=temp;
            }
        }
    }
    for(i=0;i<3;i++){
        printf("%d\n",d[i].num);
    }
    return 0;
}

问题描述

试题编号:202009-2
试题名称:

风险人群筛查

时间限制:1.0s
内存限制:256.0MB
问题描述:

题目背景

某地疫情爆发后,出于“应检尽检”的原则,我们想要通知所有近期经过该高危区域的居民参与核酸检测。

问题描述

想要找出经过高危区域的居民,分析位置记录是一种简单有效的方法。

具体来说,一位居民的位置记录包含 t 个平面坐标 (x1,y1),(x2,y2),⋯,(xt,yt),其中 (xi,yi) 表示该居民 i 时刻所在位置。
高危区域则可以抽象为一个矩形区域(含边界),左下角和右上角的坐标分别为 (xl,yd) 和 (xr,yu),满足 xl<xr 且 yd<yu。

考虑某位居民的位置记录,如果其中某个坐标位于矩形内(含边界),则说明该居民经过高危区域;进一步地,如果其中连续 k 个或更多坐标均位于矩形内(含边界),则认为该居民曾在高危区域逗留。需要注意的是,判定经过逗留时我们只关心位置记录中的 t 个坐标,而无需考虑该居民在 i 到 i+1 时刻之间位于何处。

给定高危区域的范围和 n 位居民过去 t 个时刻的位置记录,试统计其中经过高危区域的人数和曾在高危区域逗留的人数。

输入格式

输入共 n+1 行。

第一行包含用空格分隔的七个整数 n、k、t、xl、yd、xr 和 yu,含义如上文所述。

接下来 n 行,每行包含用空格分隔的 2t 个整数,按顺序表示一位居民过去 t 个时刻的位置记录 (x1,y1),(x2,y2),⋯,(xt,yt)。

输出格式

输出共两行,每行一个整数,分别表示经过高危区域的人数和曾在高危区域逗留的人数。

样例输入1

5 2 6 20 40 100 80
100 80 100 80 100 80 100 80 100 80 100 80
60 50 60 46 60 42 60 38 60 34 60 30
10 60 14 62 18 66 22 74 26 86 30 100
90 31 94 35 98 39 102 43 106 47 110 51
0 20 4 20 8 20 12 20 16 20 20 20

Data

样例输出1

3
2

Data

样例1说明

如下图红色标记所示,前三条位置记录经过了高危区域;
但第三条位置记录(图中左上曲线)只有一个时刻位于高危区域内,不满足逗留条件。

样例输入2

1 3 8 0 0 10 10
-1 -1 0 0 0 0 -1 -1 0 0 -1 -1 0 0 0 0

Data

样例输出2

1
0

Data

样例2说明

该位置记录经过了高危区域,但最多只有连续两个时刻位于其中,不满足逗留条件。

评测用例规模与约定

全部的测试点满足 1≤n≤20,1≤k≤t≤103,所有坐标均为整数且绝对值不超过 106。

#include <stdio.h>
#include <string.h>
int main()
{
    int n,k,t,xl,yd,xr,yu,i,j;
    int xx,yy;
    
    int through=0,in=0;
    scanf("%d %d %d %d %d %d %d",&n,&k,&t,&xl,&yd,&xr,&yu);
    for(i=0;i<n;i++){
        int flag1=0,flag2=0;
        int cnt=0;
        for(j=0;j<t;j++){
            scanf("%d %d",&xx,&yy);
            if(xx<xl||xx>xr||yy>yu||yy<yd){
                cnt=0;
            }
            else{
                if(flag1==0){
                    flag1=1;
                }
                if(flag2==0){
                    cnt++;
                    if(cnt==k){
                        flag2=1;
                    }
                }
            }
        }
        if(flag1==1){
            through++;
        }
        if(flag2==1){
            in++;
        }
    }
    printf("%d\n%d\n",through,in);
    return 0;
}

 

问题描述

试题编号:202006-1
试题名称:线性分类器
时间限制:1.0s
内存限制:512.0MB
问题描述:


#include <stdio.h>
#include <string.h>
typedef struct{
    int x;
    int y;
    char alpha;
}node;
int main()
{
    int n,m,i,a,b,c,j,index1,index2,flag1,flag2;
    node s[1005];
    scanf("%d %d",&n,&m);
    for(i=0;i<n;i++){
        scanf("%d %d",&s[i].x,&s[i].y);
        getchar();
        scanf("%c",&s[i].alpha);
    }
//     for(i=0;i<n;i++){
//         printf("iiiii%d %d\n",s[i].x,s[i].y);
//         printf("iiiii%c\n",s[i].alpha);
//     }
    for(i=0;i<m;i++){
        index1=0,index2=0,flag1=0,flag2=0;
        scanf("%d %d %d",&a,&b,&c);
        for(j=0;j<n;j++){
            if(s[j].alpha=='A'){
                index1++;
                if((s[j].x*b+s[j].y*c+a)>=0){
                    flag1++;
                }
            }
            if(s[j].alpha=='B'){
                index2++;
                if((s[j].x*b+s[j].y*c+a)<0){
                    flag2++;
                }
            }
        }
         //printf("ceshi===%d %d %d %d\n",index1,index2,flag1,flag2);
        if((flag1!=index1&&flag1!=0)||(flag2!=index2&&flag2!=0)){
            printf("No\n");
        }
        
        else{
            printf("Yes\n");
        }
    }
    
    return 0;
}

问题描述

试题编号:201909-2
试题名称:

小明种苹果(续)

时间限制:1.0s
内存限制:512.0MB
问题描述:


 

 

#include<stdio.h>
int apple[1000005];
int main()
{
    int n,m,i,j,flag=0;
    int drop[1000005],cursum=0,sum=0,num=0;
    scanf("%d",&n);
    for(i=0;i<n;i++){
        flag=0;
        scanf("%d",&m);
        scanf("%d",&cursum);
        drop[i]=0;
        for(j=1;j<m;j++){
            scanf("%d",&apple[j]);
            
            if(apple[j]<=0){
                cursum+=apple[j];
            }
            else if(apple[j]<cursum){
                drop[i]=1;
                cursum=apple[j];
            }
        }
        sum+=cursum;
        if(drop[i]){
            num++;
        }
    }
    int t=0;
    if(n>=3){
        for(i=0;i<n;i++){
            if(drop[(i - 1 + n) % n] && drop[i] && drop[(i + 1) % n]) t++;

        }
    }
    printf("%d %d %d\n",sum,num,t);
    return 0;
}

问题描述

试题编号:201809-2
试题名称:

买菜

时间限制:1.0s
内存限制:256.0MB
问题描述:

问题描述

  小H和小W来到了一条街上,两人分开买菜,他们买菜的过程可以描述为,去店里买一些菜然后去旁边的一个广场把菜装上车,两人都要买n种菜,所以也都要装n次车。具体的,对于小H来说有n个不相交的时间段[a1,b1],[a2,b2]...[an,bn]在装车,对于小W来说有n个不相交的时间段[c1,d1],[c2,d2]...[cn,dn]在装车。其中,一个时间段[s, t]表示的是从时刻s到时刻t这段时间,时长为t-s。
  由于他们是好朋友,他们都在广场上装车的时候会聊天,他们想知道他们可以聊多长时间。

输入格式

  输入的第一行包含一个正整数n,表示时间段的数量。
  接下来n行每行两个数ai,bi,描述小H的各个装车的时间段。
  接下来n行每行两个数ci,di,描述小W的各个装车的时间段。

输出格式

  输出一行,一个正整数,表示两人可以聊多长时间。

样例输入

4
1 3
5 6
9 13
14 15
2 4
5 7
10 11
13 14

样例输出

3

数据规模和约定

  对于所有的评测用例,1 ≤ n ≤ 2000, ai < bi < ai+1,ci < di < ci+1,对于所有的i(1 ≤ i ≤ n)有,1 ≤ ai, bi, ci, di ≤ 1000000。

#include<stdio.h>
int h[1000005];
int w[1000005];
int main()
{
    int n,a,b;
    int i,j;
    memset(h,0,sizeof(h));
    //memset(w,0,sizeof(w));
    scanf("%d",&n);
    for(i=0;i<2*n;i++){
        scanf("%d %d",&a,&b);
        for(j=a;j<b;j++){
            h[j]++;
        }
    }
//     for(i=0;i<n;i++){
//         scanf("%d %d",&a,&b);
//         for(j=a;j<=b;j++){
//             h[j]++;
//         }
//     }
    int t=0;
    for(i=0;i<1000005;i++){
        if(h[i]==2){
            t++;
            //printf("ceshi    ===%d\n",i);
         }
    }
    printf("%d\n",t);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2016ccf冠军团队的代码是指获得2016年CCF(中国计算机学会)(The China Computer Federation)比赛冠军的团队所编写的代码。具体的代码内容我们无从得知,因为CCF比赛通常会设置保密条款,禁止公开透露参赛队伍的代码细节。 然而,CCF比赛冠军的团队往往会有一些共同的特点和优势。首先,冠军团队通常会有丰富的技术背景和扎实的编程能力,掌握各种编程语言和开发工具。其次,他们会深入理解比赛规则和要求,并能够快速、有效地解决问题。此外,团队成员间的合作与沟通也是他们成功的关键。 一个典型的CCF冠军团队的代码可能包括了创新的算法和数据结构,以及针对比赛题目的高效实现。在编写代码的过程中,团队成员可能会运用诸如贪心算法、动态规划、回溯算法等各种经典算法来解决问题。他们还会关注代码的整体性能和运行效率,采用合适的数据结构和优化策略以提高程序的执行速度。 冠军团队的代码也可能包含了强大的调试和测试能力,他们会编写全面的测试用例以验证代码的正确性。此外,代码的可读性和扩展性也是他们所注重的方面,从而使代码能够被快速理解和修改。 总之,获得CCF比赛冠军的团队的代码往往是经过精心设计和优化的,并且具备高可读性、高效性和可扩展性。这些代码不仅仅是解决问题的工具,更是团队智慧和努力的结晶。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值