首页 > 编程语言 >算法讲演录[1]

算法讲演录[1]

时间:2024-08-31 10:14:28浏览次数:12  
标签:语句 变量 ll 整数 讲演录 算法 long 变量名

准备

在线测评系统

Codeforces是一个提供在线评测系统的俄罗斯网站。截止2023年,该网站已经拥有超过2,000,000的注册用户。

AtCoder是日本最大的算法竞技网站。提供编程在线比赛、过往比赛提交、在线评测等服务。

准备工作

  1. 安装Code::Blocks

  2. 安装Edge浏览器。

  3. 安装浏览器扩展——篡改猴

  4. 安装脚本Atcoder Better!

认识程序

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
	ll a,b;
	cin >> a >> b;
	cout << a+b;
	return 0;
}

程序功能:输入两个整数,程序会输出这两个整数的和。

整数

输出整数

cout << 整数;

使用整数表达式

  • +

  • -

  • *

  • 除(向下取整)/(表达向下取整含义时,除数不能是负数,被除数必须是正数)

优先级:先乘除,后加减。括号()可以改变运算顺序。

*不等式的性质

性质1:不等式两边加同一个数,不等号的方向不变.

若\(a>b\),则\(a+c>b+c\)。

性质2:不等式两边乘同一个正数,不等号的方向不变.

若\(a>b\)且\(c>0\),则\(ac>bc\)。

性质3:不等式两边乘同一个负数,不等号的方向改变.

若\(a>b\)且\(c<0\),则\(ac<bc\)。

*整数除法

a除以b向下取整写作\(\lfloor \frac{a}{b} \rfloor\),表示小于等于\(\frac{a}{b}\)的整数中最大的一个。

a除以b向上取整写作\(\lceil \frac{a}{b} \rceil\),表示大于等于\(\frac{a}{b}\)的整数中最小的一个。

*一些结论:

  1. 若\(x\)为整数且\(x\le\frac{a}{b}\),则\(x\)的取值范围为\(x\le\lfloor\frac{a}{b}\rfloor\)。

  2. 若\(x\)为整数且\(x\ge\frac{a}{b}\),则\(x\)的取值范围为\(x\ge\lceil\frac{a}{b}\rceil\)。

  3. 若\(x\)为整数,则\(\lfloor\frac{a}{b}+x\rfloor=\lfloor\frac{a}{b}\rfloor+x\)且\(\lceil\frac{a}{b}+x\rceil=\lceil\frac{a}{b}\rceil+x\)。

  4. 若a为非负整数且b为正整数,则\(\lceil\frac{a}{b}\rceil=\lfloor\frac{a+b-1}{b}\rfloor\)。

整数变量

声明一个整数变量:

long long 变量名;

如果在main()前面加上typedef long long ll;,可以用下面的代码声明一个整数变量:

ll 变量名;

声明多个变量:

ll 变量名1,变量名2,变量名3,...,变量名n;

变量名的规则:

  1. 标识符不能是关键字。
  2. 标识符只能由字母、数字和下划线字符组成。
  3. 标识符必须以字母或下划线开头。不能以数字开头。
  4. 区分大小写。

标识符:用户编程时使用的名字。

练习:判断以下标识符是否可以作为变量名

hello

3d

_0_0_

long

LoNg

对整数变量进行赋值:

变量名=整数;

声明整数变量的同时可以对其进行赋值:

ll 变量名=整数;

声明多个变量同理:

ll 变量名1=整数,变量名2=整数,变量名3=整数,...,变量名n=整数;

练习:阅读程序,给出程序的输出结果

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
    ll a=1,b=2;
    cout << a+b*3+4;
	return 0;
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
    ll a=3,b=4,c=0;
    c=a;
    a=b;
    b=c;
    cout << a*2+b;
	return 0;
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
    ll a=1,b=1;
    ll c=a+b;
    a=b+c;
    b=c+a;
    c=a+b;
    a=b+c;
    a=a+10;
    cout << a;
	return 0;
}

输入整数

cin >> 整数变量;

例题:输入两个整数a,b,输出它们的和。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
	ll a,b;
	cin >> a >> b;
	cout << a+b;
	return 0;
}

abc178a-Not

abc198a-Div

abc172a-Calc

abc302a-Attack

abc262a-World Cup

abc173a-Payment

取模

计算\(a(a\ge 0)\)除以\(b(b>0)\)的余数:

a%b

也可以表示为\(a-\lfloor\frac{a}{b}\rfloor\cdot b\)。

a-a/b*b

abc254a-Last Two Digits

abc235a-Rotate

abc227a-Last Card

条件判断

布尔类型

布尔类型的取值有两种:

  • true 表示真,数值为1。

  • false 表示假,数值为0。

声明一个布尔变量:

bool 变量名;

给布尔变量赋非零值时,会转为true(1)。

关系运算符

== 等于

!= 不等于

> 大于

< 小于

>= 大于等于

<= 小于等于

当条件为真时,返回true(1),否则返回false(0)。

逻辑运算符

&& 且:操作数均为true时,结果为true,否则为false。

*并且:用于连接并列的形容词等,表示同时存在。

|| 或:操作数均为flase时,结果为false,否则为true。

*或者:用在叙述句里,表示选择关系。

! 非(只有一个操作数):操作数为true时,结果为false;操作数为false时,结果为true。

条件的表达

x大于5且x小于等于9

x>5&&x<=9

x大于等于8或x小于3

x>=8||x<3

练习:

  • x与y的和是正数且x与y的积是负数

  • x在10到20之间,或者在30到40之间

  • x和y中至少有一个3的倍数,并且x+y和x*y中至少有一个是4的倍数

  • x年是闰年

闰年:能被4整除且不能被100整除,或者能被400整除。

if语句

if(条件){
    语句;
    语句;
    ...
    语句;
}else{
    语句;
    语句;
    ...
    语句;
}

当条件为真(true)时,程序会执行if大括号内的语句,否则执行else大括号内的语句。

如果只有一条语句,可以简写为:

if(条件)语句;
else 语句;

若想在条件为假(false)时不执行语句,可以将else省略。

常用函数

得到两个数的最大值

max(数,数)

得到多个数的最大值

max({数,数,...,数})

得到两个数的最小值

min(数,数)

得到多个数的最小值

min({数,数,...,数})

交换两个变量的值

swap(变量名,变量名)

求一个数的绝对值

abs(数)

实数\(x\)的绝对值,记为\(\left|x\right|\)。

\( |x|= \begin{cases} x&x>0\\ 0&x=0\\ -x&x<0\\ \end{cases} \)

输出字符串

cout << 字符串;

由双引号包裹的内容为字符串,如"yes""no"

三元运算符

条件?X:Y

如果满足条件,表达式的值为X,否则为Y。

yes or no

例题:abc223a-Exact Price

使用if:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
	ll x;
	cin >> x;
	if(x%100==0&&x>0)cout << "Yes";
	else cout << "No";
	return 0;
}

使用三元运算符:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
	ll x;
	cin >> x;
	cout << (x%100==0&&x>0?"Yes":"No");
	return 0;
}

abc253a-Median?

abc228a-On and Off

abc309a-Nine

abc240a-Edge Checker

判断结果

abc243a-Shampoo

abc245a-Good morning

abc249a-Jogging

分类讨论

abc250a-Adjacent Squares

abc214a-New Generation ABC

abc259a-Growth Record

abc331a-Tomorrow

abc355a-Who Ate the Cake?

abc305a-Water Station

abc233a-10yen Stamp

<题单1-1>

abc326a-2UP3DOW

abc352a-AtCoder Line

abc343a-Wrong Answer

abc318a-Full Moon

<题单1-2>

abc269a-Anyway Takahashi

abc334a-Christmas Present

abc212a-Alloy

abc219a-AtCoder Quiz 2

循环

数学知识补充:等差数列

换行

cout << endl;

也可以使用转义字符\n

cout << '\n';

自增和自减

将变量的值+1

变量名++

或者

++变量名

同理,将变量的值-1

变量名--

或者

--变量名

将变量的值+n

变量名+=n

同理,将变量的值-n

变量名-=n

i++和++i的区别(i--和--i同理):

i++是先赋值,然后再自增;++i是先自增,后赋值。
用代码表示就是:
若 a = i++; 则等价于 a=i;i=i+1;
而 a = ++i; 则等价于 i=i+1;a=i;

while循环

while(条件){
    语句;
    语句;
    ...
    语句;
}

当条件满足时,会反复执行大括号内的语句。

练习(使用while循环):

  • 无限输出hello

  • 输出10次hello

  • 按顺序输出1到100的所有数

  • 按顺序输出100到1的所有数

  • 从小到大输出1到100的所有是7的倍数的奇数

for循环

for(初始化语句;条件;主体结束执行语句){
    语句;
    语句;
    ...
    语句;
}

for循环开始前会执行初始化语句

在满足条件时,循环会一直运行大括号内的语句。

每运行完一次大括号内的语句时,会执行一次主体结束执行语句

初始化语句条件主体结束执行语句均可以省略,省略条件时,循环会一直进行下去。

练习(使用for循环):

  • 无限输出hello

  • 输出10次hello

  • 按顺序输出1到100的所有数

  • 按顺序输出100到1的所有数

  • 从小到大输出1到100的所有是7的倍数的奇数

循环控制语句

退出当前循环:

break;

跳过此次循环的剩余部分:

continue;

变量的作用域

局部变量:在函数或一个代码块内部声明的变量。只能被函数内部或者代码块内部的语句使用。

全局变量:在所有函数外部定义的变量。全局变量的值在程序的整个生命周期内都是有效的。

声明全局变量时,变量的初始值为0。

重复

abc288a-Many A+B Problems

abc283a-Power

abc320a-Leyland Number

abc221a-Seismic magnitude scales

abc238a-Exponential or Quadratic

枚举

abc281a-Count Down

abc340a-Arithmetic Progression

数组

数组可以用来声明多个相同类型的变量

声明\(N\)个整数变量的方法:

ll 数组名[N];

声明\(N\)个布尔变量同理:

bool 数组名[N];

用以上方法声明数组后,可以使用的变量为:

数组名[0]数组名[1]数组名[2]、...、数组名[N-2]数组名[N-1],共\(N\)个变量。

注意:这里的\(N\)是常量,不能是变量。

常量:在程序执行期间不会改变的固定值。

整数常量的声明:

const ll 常量名=整数;

案例:输入正整数\(n\),以及\(n\)个整数:\(a_1,a_2,a_3,...,a_n\)。将它们倒序输出(两个数之间用空格隔开)。

ll n,a[N];
cin >> n;
for(ll i=1;i<=n;i++)cin >> a[i];
for(ll i=n;i>=1;i--)cout << a[i] << " ";

数组和

abc272a-Integer Sum

abc351a-The bottom of the ninth

abc349a-Zero Sum Game

abc337a-Scoreboard

abc332a-Online Shopping

存在寻找

abc353a-Buildings

abc317a-Potions

abc300a-N-choice question

abc277a-^{-1}

abc313a-To Be Saikyo

数据过滤

abc347a-Divisible

abc294a-Filter

加工计算

abc346a-Adjacent Product

abc290a-Contest Result

abc307a-Weekly Records

abc330a-Counting Passes

数组操作

abc278a-Shift

abc247a-Move Right

abc248a-Lacked Number

abc268a-Five Integers

abc263a-Full House

<题单1-3>

abc328a-Not Too Hard

abc297a-Double Click

abc275a-Find Takahashi

abc241a-Digit Machine

标签:语句,变量,ll,整数,讲演录,算法,long,变量名
From: https://www.cnblogs.com/halfah/p/18389908

相关文章

  • 【数据结构】排序算法篇一
    【数据结构】排序算法篇一1.插入排序(1)基本思想:(2)动态图解:(3)具体步骤:(4)代码实现:(5)特性总结:2.希尔排序(缩小增量排序)(1)基本思想:(2)静态图解:(3)具体步骤:(4)代码实现:(5)特性总结:3.堆排序(1)基本思想:(2)具体步骤:(3)代码实现:(4)特性总结:4.选择排序(1)基本思想:(2)动态图解:(3)具体步骤:(4)代码实现:(5)特......
  • 代码随想录算法day4 - 链表2
    题目124.两两交换链表中的节点给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。示例1:输入:head=[1,2,3,4]输出:[2,1,4,3]示例2:输入:head=[]输出:[]示例3:输入:head=[1]输出:[1]......
  • 【秋招笔试】8.30饿了么秋招(算法岗)-三语言题解
    ......
  • 深度强化学习算法(六)(附带MATLAB程序)
    深度强化学习(DeepReinforcementLearning,DRL)结合了深度学习和强化学习的优点,能够处理具有高维状态和动作空间的复杂任务。它的核心思想是利用深度神经网络来逼近强化学习中的策略函数和价值函数,从而提高学习能力和决策效率。一、关键算法分类1.1深度Q网络(DeepQ-Networ......
  • 卡尔曼滤波算法(c语言代码)
    卡尔曼滤波器是一种用于估计动态系统状态的算法,常用于信号处理、控制系统、机器人和导航等领域。以下是一个简单的卡尔曼滤波器的C语言实现示例。这个示例展示了如何使用卡尔曼滤波器来估计一维系统的状态。1.卡尔曼滤波器算法概述卡尔曼滤波器由两部分组成:预测和更新。基......
  • 【智能算法改进】多策略融合的改进黑猩猩搜索算法及其应用
    目录1.算法原理2.改进点3.结果展示4.参考文献5.代码获取1.算法原理【智能算法】黑猩猩优化算法(ChOA)原理及实现2.改进点改进的Sine混沌映射初始化种群ChoA种群随机初始化的方法导致种群多样性、均匀性差、容易出现边界聚集现象,而混沌映射可以有效的改善上述......
  • 模板方法模式:如何实现同一模板框架下的算法扩展?
    模板方法模式的原理和代码实现都比较简单,在软件开发中也被广泛应用,但是因为使用继承机制,副作用往往盖过了主要作用,所以在使用时尤其要小心谨慎。一、模式原理分析模板方法模式原始定义是:在操作中定义算法的框架,将一些步骤推迟到子类中。模板方法让子类在不改变算法结构的情况下重......
  • 【智能算法应用】基于融合改进A星-麻雀搜索算法求解六边形栅格地图路径规划
    目录1.算法原理2.结果展示3.参考文献4.代码获取1.算法原理【智能算法】麻雀搜索算法(SSA)原理及实现六边形栅格地图分析一下地图:六边形栅格地图上移动可以看做6领域运动,偶数列与奇数列移动方式有所差异,将六边形栅格地图与二维栅格地图做映射可以发现:偶数列移动......
  • 机器学习:DBSCAN算法(内有精彩动图)
    目录前言一、DBSCAN算法1.动图展示(图片转载自网络)2.步骤详解3.参数配置二、代码实现1.完整代码2.代码详解1.导入数据2.通过循环确定参数最佳值总结前言        DBSCAN(Density-BasedSpatialClusteringofApplicationswithNoise)是一种基于密度的聚类......
  • 路径规划算法
    FieldD*FiledD*算法是D_starLite算法的一种改进版本,该算法针对基于栅格的路径规划算法通常以栅格端点或中心点作为路径的节点,限制了路径方向变化只能为π/4的倍数,会导致机器人不必要的运动转向,影响执行效率。而DaveFerguson提出的FiledD*算法,通过对栅格进行线性插值使路......