作为ACMer的新手,该怎么做

版权声明:作者QQ:2669157689 https://blog.csdn.net/xiaogang_17042112/article/details/83545160

首先感谢所有ACMer

这是我第一次写博客,目前网上大佬写的博客越来越多,我也希望能加入到这个行列当中,如若文章中出现冲突,或者出现错误,请联系 QQ:2669157689 指出我的问题。谢谢~

让我们来进入正题

首先让我们来认识一下什么是ACM。

ACM(大学生程序设计大赛)(英文全称:ACM International Collegiate Programming Contest(简称ACM-ICPC或ICPC)):是由国际计算机协会(ACM)主办的,一项旨在展示大学生创新能力、团队精神和在压力下编写程序、分析和解决问题能力的年度竞赛。经过近40年的发展,ACM国际大学生程序设计竞赛已经发展成为全球最具影响力的大学生程序设计竞赛。赛事目前由IBM公司赞助。

  1. ACM简介: ACM(国际计算机学会)是一家科教性质的协会,旨在联合全球计算机领域的教学人员、研究人员和从业人员,开展行业交流活动、共享资源和解决业界难题。凭借绝对的领导地位。
  2. 竞赛特点:
    1.参赛队伍最多由三名参赛队员组成。
    2.竞赛中命题10题左右,试题描述为英文,比赛时间为5个小时,前四个小时可以实时看到排名,最后一小时封榜,无法看到排名。
    3.竞赛可以使用的语言:Java, C, C++, Kotlin 和 Python(目前我就知道这些)。
    4.重点考察选手的算法和程序设计能力,不考察实际工程中常用的系统编程,多线程编程等等;
    5.选手可携带任何非电子类资料,包括书籍和打印出来的程序等,部分赛区会对选手携带的纸质资料做限制。
    6.评委负责将结果(正确或出错的类型)通过网络尽快返回给选手,除此之外不提供任何额外帮助;
    7.每个题目对应一种颜色的气球,通过该题目的队伍会得到对应颜色气球。每道题目第一支解决掉它的队还会额外获得一个“FIRST PROBLEM SOLVED”的气球。
  3. 评分标准:
    1、Accepted. ——通过!(AC,a了)
    2、Wrong Answer.——答案错。(WA,wa的一声就哭了)
    3、Runtime Error.——程序运行出错,意外终止等。(RE,数组是不是越界了)
    4、Time Limit Exceeded. ——超时。程序没在规定时间内出答案。(TLE,又超时了)
    5、Presentation Error. ——格式错。程序没按规定的格式输出答案。(PE,赶紧休整一下提交)
    6、Memory Limit Exceeded. ——超内存。程序没在规定空间内出答案。(MLE,怎么写了这么长的代码)
    7、Compile Error. ——编译错。程序编译不过。(CE,是不是交错语言了)
  4. 奖励情况: 区域赛一般分别按10%,20%,30%的比例颁发金,银,铜奖,除此之外做出题的全为优胜奖(金银铜铁)。
  5. 意义: ACM始终致力于推行最高行业标准,表彰杰出技术人才,加强计算机行业的整体队伍建设。ACM通过为成员提供终生学习、职业发展及与专业人士联谊的机会,支持其在各自的专业领域取得长足进步。

以上内容摘自百度百科

程序设计基础

  1. 从最基础的“Hello World”开始
#include<stdio.h>
int main()
{
    printf("Hello World\n");
}

输出的结果如下:

Hello World
  1. 然后就是课本中的循环,判断。

此处代码略过

下面是基础算法

  1. 判断闰年
#include <stdio.h>
int main()
{
    int year;
    scanf("%d", &year);
    if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) printf("leap year\n");
    else printf("not leap year\n");
}

这种简单的问题不用我再解释了吧。下面是输入输出:

//样例输入
2000
//样例输出
leap year
  1. 冒泡排序
void bubble_sort(int arr[], int len)
{
    int i, j, temp;
    for (i = 0; i < len - 1; i++)
        for (j = 0; j < len - 1 - i; j++)
       	    if (arr[j] > arr[j + 1]) {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
}

冒泡排序算法的原理如下,(时间复杂度:O(n2 ):

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。

  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

  3. 针对所有的元素重复以上的步骤,除了最后一个。

  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

  5. 选择排序

void selection_sort(int arr[], int len) {
    int minIndex, temp;
    for (int i = 0; i < len - 1; i++) {
        minIndex = i;                   
        for (int j = i + 1; j < len; j++) {
            if (arr[j] < arr[minIndex]) {    
                minIndex = j;               
            }
        }
        temp = arr[i];  
        arr[i] = arr[minIndex];
        arr[minIndex] = temp;
    }
}

选择排序算法的原理如下(时间复杂度:O(n2 ):初始时在序列中找到最小(大)元素,放到序列的起始位置作为 已排序序列;然后,再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

好了今天就先写这么多,毕竟我还是个新手。以后希望大佬们多多照顾~~

猜你喜欢

转载自blog.csdn.net/xiaogang_17042112/article/details/83545160