C++的数组

https://www.runoob.com/cplusplus/cpp-arrays.html

•【1】数组定义,数组与数组下标的含义
•【1】数组的读入与输出
•【2】纯一维数组的综合运用
•【3】纯二维数组与多维数组的综合应用

C++ 支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。

数组的声明并不是声明一个个单独的变量,比如 number0number1...number99,而是声明一个数组变量,比如 numbers,然后使用 numbers[0]numbers[1]...numbers[99] 来代表一个个单独的变量。数组中的特定元素可以通过索引访问。

所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。

声明数组

在 C++ 中要声明一个数组,需要指定元素的类型和元素的数量,如下所示:

type arrayName [ arraySize ];

这叫做一维数组。arraySize 必须是一个大于零的整数常量,type 可以是任意有效的 C++ 数据类型。例如,要声明一个类型为 double 的包含 10 个元素的数组 balance,声明语句如下:

double balance[10];

现在 balance 是一个可用的数组,可以容纳 10 个类型为 double 的数字。

常见问题

如果输入既有可能是 2*500000 的数组,也有可能是 500000*2 的数组怎么办?

  1. 开一位数组,自己算下标,比如一共n行m列,那第i行第j列可以变成一维数组的i*m+j
  2. 使用vector

数组练习题

https://atcoder.jp/contests/abc161/tasks/abc161_b
n个商品被投票,第i个的票数是Ai
问能不能选出m个商品,使得选出的商品的票数都大于等于 总票数/(4m)

参考代码

#include <bits/stdc++.h>
using namespace std;
int n, m, s, c;
int a[100];
int main()
{
	cin >> n >> m;
	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
		s += a[i];
	}
	for (int i = 0; i < n; i++)
	{
		if (4 * m * a[i] >= s)
		{
			c++;
		}
	}
	cout << (c < m ? "No" : "Yes") << endl;
	return 0;
}

题解

数组或循环练习题

abc151_b Achieve the Goal

https://atcoder.jp/contests/abc151/tasks/abc151_b
一共N门课,每门课的分数是0到K的一个数字
已知前N-1门课的分数,问最后一门课至少多少分,才能使得所有课平均分>=M
如果做不到输出-1

参考代码

#include <bits/stdc++.h>
using namespace std;
int n, k, m, x;
int main()
{
	cin >> n >> k >> m;
	m *= n;
	for (int i = 1; i < n; i++)
	{
		cin >> x;
		m -= x;
	}
	if (m > k)
	{
		cout << -1 << endl;
	}
	else
	{
		cout << max(m, 0) << endl;
	}
	return 0;
}

题解

abc143_b TAKOYAKI FESTIVAL 2019

https://atcoder.jp/contests/abc143/tasks/abc143_b
输入n个数字,我们都知道从n个数字中选两个有n*(n+1)/2个方案
对于这n*(n+1)/2个方案,选出的2个数字计算乘积
问这n*(n+1)/2个乘积的和是多少?

参考代码

#include <bits/stdc++.h>
using namespace std;
int n, x, s, t;
int main()
{
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> x;
		s += x;
		t += x * x;
	}
	cout << (s * s - t) / 2 << endl;
	return 0;
}

题解

abc142_b Roller Coaster

https://atcoder.jp/contests/abc142/tasks/abc142_b
输入N个数字,问其中有多少个>=K

参考代码

#include <bits/stdc++.h>
using namespace std;
int n, k, h, z;
int main()
{
	cin >> n >> k;
	for (int i = 0; i < n; i++)
	{
		cin >> h;
		if (h >= k)
		{
			z++;
		}
	}
	cout << z << endl;
}

题解

abc135_b 0 or 1 Swap

https://atcoder.jp/contests/abc135/tasks/abc135_b
输入一个1到n的排列,问能不能通过交换至多一次让排列变成升序?

参考代码

#include <bits/stdc++.h>
using namespace std;
int n, x, c;
int main()
{
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> x;
		if (x != i)
		{
			c++;
		}
	}
	cout << (c > 2 ? "NO" : "YES") << endl;
	return 0;
}

题解

abc130_b Bounding

https://atcoder.jp/contests/abc130/tasks/abc130_b
输入X和n个长度Li,初始在0,第i次向前走Li的长度,问有几次所在的位置<=X
在0不走也算一次

参考代码

#include <bits/stdc++.h>
using namespace std;
int n, x, l, s, z = 1;
int main()
{
	cin >> n >> x;
	for (int i = 0; i < n; i++)
	{
		cin >> l;
		s += l;
		if (s <= x)
		{
			z++;
		}
	}
	cout << z << endl;
	return 0;
}

题解

abc127_b Algae

https://atcoder.jp/contests/abc127/tasks/abc127_b
输入rDX[2000]
X[i+1]=r*X[i]-D
输出X[2001], ..., X[2010]

参考代码

#include <bits/stdc++.h>
using namespace std;
int r, d, x;
int main()
{
	cin >> r >> d >> x;
	for (int i = 0; i < 10; i++)
	{
		x = r * x - d;
		cout << x << endl;
	}
	return 0;
}

题解

abc124_b Great Ocean View

https://atcoder.jp/contests/abc124/tasks/abc124_b
输入一个数组,问有多少个数组大于等于自己左边的所有数字

参考代码

#include <bits/stdc++.h>
using namespace std;
int n, f, h, z;
int main()
{
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> h;
		if (f <= h)
		{
			f = h;
			z++;
		}
	}
	cout << z << endl;
	return 0;
}

题解

abc120_b K-th Common Divisor

https://atcoder.jp/contests/abc120/tasks/abc120_b
输入A, B, K输出ABK大的公约数,保证存在

参考代码

#include <bits/stdc++.h>
using namespace std;
int a, b, k;
int main()
{
	cin >> a >> b >> k;
	for (int i = 100; i > 0; i--)
	{
		if (a % i == 0 && b % i == 0)
		{
			if (--k == 0)
			{
				cout << i << endl;
				break;
			}
		}
	}
	return 0;
}

题解

基础语法题

abc070_b Two Switche

https://atcoder.jp/contests/abc070/tasks/abc070_b
甲在时刻A秒按下按钮,时刻B秒松开按钮
乙在时刻C秒按下按钮,时刻D秒松开按钮
问甲乙同时按下按钮多少秒?

参考代码

#include <bits/stdc++.h>
using namespace std;
int a, b, c, d;
int main()
{
	cin >> a >> b >> c >> d;
	cout << max(min(b, d) - max(a, c), 0) << endl;
	return 0;
}

题解

abc134_b Golden Apple

https://atcoder.jp/contests/abc134/tasks/abc134_b
一个人如果站在i,可以监视i-d到i+d的所有人,现在1到n共n个人排成一行
问需要几个人才能监视所有人?

参考代码

#include <bits/stdc++.h>
using namespace std;
int n, d;
int main()
{
	cin >> n >> d;
	cout << (n + 2 * d) / (2 * d + 1) << endl;
	return 0;
}

题解

abc126_b YYMM or MMYY

https://atcoder.jp/contests/abc126/tasks/abc126_b
输入4位数字,问是否可能 YYMM, MMYY, AMBIGUOUS or NA

参考代码

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int n;
	cin >> n;
	int a = n / 100;
	int b = n % 100;
	if (0 < a && a < 13 && 0 < b && b < 13)
	{
		cout << "AMBIGUOUS" << endl;
	}
	else if (0 < b && b < 13)
	{
		cout << "YYMM" << endl;
	}
	else if (0 < a && a < 13)
	{
		cout << "MMYY" << endl;
	}
	else
	{
		cout << "NA" << endl;
	}
	return 0;
}

题解

abc154_a Remaining Balls

https://atcoder.jp/contests/abc154/tasks/abc154_a
输入A个S色的球,B个T色的球
拿走一个U色的球
问S色的球和T色的球还剩下几个(其中有且只有一种颜色会减少一个)

参考代码

题解

abc153_a Serval vs Monster

https://atcoder.jp/contests/abc153/tasks/abc153_a
一个怪物初始生命值H,被攻击一次生命值减少A,如果怪物生命值小于等于零玩家胜利
问需要攻击几次

参考代码

题解

abc148_a Round One

https://atcoder.jp/contests/abc148/tasks/abc148_a
三个选项1, 2, 3
输入两个错误选项,问正确的是哪个?

参考代码

题解

abc144_a 9x9

https://atcoder.jp/contests/abc144/tasks/abc144_a
输入两个正整数,如果都小于等于9,输出他们的乘积,否则输出-1

参考代码

题解

abc122_a Double Helix

https://atcoder.jp/contests/abc122/tasks/abc122_a
A和T配对,C和G配对
输入一个字母,输出和他配对的字母

参考代码

题解

abc121_a White Cells

https://atcoder.jp/contests/abc121/tasks/abc121_a
H行W列的一个网格,其中h行w列被染色,问多少个格子没有被染色
注意没有被染色的格子数目,和选哪些行,哪些列染色无关

参考代码

题解

  1. C++的数组
    1. 声明数组
  2. 常见问题
  3. 数组练习题
    1. abc161_b Popular Vote
  4. 数组或循环练习题
    1. abc151_b Achieve the Goal
    2. abc143_b TAKOYAKI FESTIVAL 2019
    3. abc142_b Roller Coaster
    4. abc135_b 0 or 1 Swap
    5. abc130_b Bounding
    6. abc127_b Algae
    7. abc124_b Great Ocean View
    8. abc120_b K-th Common Divisor
  5. 基础语法题
    1. abc070_b Two Switche
    2. abc134_b Golden Apple
    3. abc126_b YYMM or MMYY
    4. abc154_a Remaining Balls
    5. abc153_a Serval vs Monster
    6. abc148_a Round One
    7. abc144_a 9x9
    8. abc122_a Double Helix
    9. abc121_a White Cells