首页 > 其他分享 >ACM初学者指南学习心得

ACM初学者指南学习心得

时间:2022-12-28 23:12:06浏览次数:66  
标签:rand MIN int big 学习心得 ACM 初学者 随机数 MAX

2022年快过完了,上学期有点摆烂,最近刚刚阳过,在家颓废了好几天。昨天看了一部电影《大学》,非常励志。看完电影,深感自己大学以来这一年半过得有点小糟糕,昨天被刺激了一下,今天下定决心今后不能再摸鱼了,要好好学习,努力奋斗。所以想每天记录一下自己的学习心得,既是对每一天的总结,也算是对自己学习的一种督促吧!

报名了2023年的蓝桥杯,今天看了老师发的初学者指南,感觉非常有用。

OJ

这个代理网站列出了著名的OJ。

数据的构造、对拍

  • 题目:给你n个整数,请按从大到小的顺序输出其中前m大的数。
  • 输入:每组测试数据有两行,第一行有两个数n, m(0 < n, m < 1000000),第二行包含n个各不相同,且都处于区间[-500000, 500000]的整数。
  • 输出:对每组测试数据按从大到小的顺序输出前m大的数。

如何构造极大范围内的随机数

例如,生成[1, 1000000]内的随机数。

但是,rand() 只能生成大小在[0, RAND_MAX]内的随机数。RAND_MAX=32768

2个方法:

(1)

rand()*rand() ,这样很简单,不过几乎不能产生素数。

(2)

unsigned long ulrand() {//生成一个大随机数
 return (
     (((unsigned long)rand() << 24) & 0xFF000000ul) 
     | (((unsigned long)rand() << 12) & 0x00FFF000ul) 
     | (((unsigned long)rand()) & 0x00000FFFul));
}

生成 [MIN, MAX]之间的一个随机数。

const int MAX = 1000000;//100万 
const int MIN = 0;

int big_rand = ulrand() % (MAX-MIN + 1) + MIN;//大随机数

如何去掉重复的随机数

简单又最快的方法:hash,用一个hash数组判断重复。(不过,这个方法的问题是:产生的随机数都在 [0,100万](或者可以扩大到[0,1000万] )之内)。

用hash判重和去重:

int myhash[MAX];//hash表
int mynum[MAX];//记录不同的随机数

下面处理随机数big_rand:

if(myhash[big_rand] == 0) { //第big_rand位置还没有
     myhash[big_rand] = 1;            
     //随机数big_rand ,登记在myhash[]的第big_rand个位置
     mynum[num]= big_rand;//记录随机数
     num++;//记录随机数的数量
}

【算法·哈希】哈希Hash判重算法入门_pigzhouyb的博客-CSDN博客_哈希判重

如何进行对拍

把程序提交到OJ之前,要先检验程序的正确性。前面已经有了输入测试数据,那么输出数据如何产生?
再写一个暴力的程序,它肯定会超时,但是结果是正确的。对照两个程序的输出是否一致。

比较2个程序的输出是否一样:

Windows:fc命令

Linux:diff命令

做好编程笔记

刷题需要做笔记!

标签:rand,MIN,int,big,学习心得,ACM,初学者,随机数,MAX
From: https://www.cnblogs.com/catting123/p/17011489.html

相关文章

  • Java千问12:七个问题帮助初学者深入理解Java数组
    ​几乎所有的高级语言当中,都提供了一种叫做”数组”的东西,Java语言当然也不例外。我们通过数组可以很方便的存储和管理一组数据。因为在Java语言当中使用数组非常的方便,所以......
  • 入门之路:“机器学习初学者”公众号2019年的精选原创文章
    “机器学习初学者”公众号2019年的精选原创文章合集,适合初学者入门AI。本文建议用微信收藏,用碎片时间学习。(黄海广)导语AI初学者最大的问题就是:资料太多!!!看不完!!!不知道如何......
  • 这几个b站的Python教程非常适合初学者
    1、微软 Python入门课程这是微软放出的一门免费的Python教程,名字叫PythonforBeginners,专为初学者打造,一共有44个视频,每个视频的时长大概在2-6分钟之间,只有极少......
  • 10个中文成语,10种Python初学者常见错误
    哈喽兄弟们,我总结了Python中十种新手常见的错误,每一个都可以用成语来形容,看看各位遇到过多少次了!一、画蛇添足多余的分号Python语言与大多数编程语言不相同,它的......
  • 第一章《初学者问题大集合》第3节:学了Java编程能应聘什么岗位
    ​在回答这个问题之前,必须先弄清楚一个事实:软件工程师是一个专业性很强的职业,就像医生一样,虽然眼科医生、牙科医生、骨科医生都是医生,但他们的专业知识和工作内容差别还是很......
  • ACM预备队-week8(DP2)
    1.疯狂的采药完全背包题目链接:P1616疯狂的采药-洛谷|计算机科学教育新生态(luogu.com.cn)1#include<bits/stdc++.h>2usingnamespacestd;3#defineint......
  • 使用Acme.sh免费签发SSL证书
    github:​​https://github.com/acmesh-official/acme.sh​​ 概述一个纯粹用Shell(Unixshell)语言编写的ACME协议客户端。完整的ACME协议实施。支持ACMEv1和ACMEv2支持......
  • ACME:通过DNS方式添加证书
    在通常情况下,用DNSAPI方式自动注册证书是最好的方式,但是如果域名服务商不支持API方式,然后又想注册泛域名的话,就只能通过DNS手动方式来操作。首先第一步,调用issue参数来......
  • [翻译]写给初学者的源代码安装指南Beginner's Guide to Installing from Source
    写给初学者的源代码安装指南引入本文档面向希望直接从原始作者处安装软件的开源操作系统用户,而不是仅依赖其操作系统提供的软件(和版本)。它是为那些不熟悉以源代码形式下......
  • 【学习心得】学习SDRAM课程体会
    最近,有机会学习了明德扬SDRAM接口设计课程,将学习心得体会,用图文的形式简单地记录了下来。这个教程的学习让我受益匪浅,可以感受出来,明德扬老师是在认真做课程,点赞!......