Day9 洛谷真题讲解

Day9 洛谷真题讲解_第1张图片

 我们来看一下这道题,其实刚开始看见这道题,我的第一想法是直接利用一个表格,然后给每一个字母覆上值,但是我一想到要是真写26个我都得疯,所以我~~~~看了题解,发现其实可以

#include
#include
using namespace std;
int main()
{
	string s;
	getline(cin, s);
	int res = 0;
	int num[26] = { 1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,4,1,2,3,1,2,3,4 };
	for (int i = 0; i < s.size(); i++)
	{
		if (s[i] == ' ')
		{
			res++;
		}
		else
		{
			res += num[s[i] - 'a'];
		}
	}
	
	cout << res;
}

这么写完之后,再利用数组套数组,就可以很方便的求出来,但是做题真的很关键!!!

有的时候真是也是不知道是自己做题做的还是不够多呢,还是咋地呢,一看到别人的题解,不得有的感慨,啊!原来还可以这么写,真的是太聪明了!!

接下来我们来看题,

Day9 洛谷真题讲解_第2张图片

刚开始看到这道题,第一想法肯定是想看一看有啥秘籍么?能直接算出来么?但是我发现好像不是这样的,后来我也是想了好久,但是我知道我自己想的方法肯定会越界 ,我又开始想难道可以用总的去减么?

一看到题解中的

突然之间茅塞顿开,

但是大家写这道题的时候一定要注意哦是n*n,就意味着,他是(1,1)开始的坐标网格

#include
using namespace std;
int arr[1300][1300];
int main()
{
	int m, n, k;
	cin >> n >> m >> k;
	//下面的是对于火把的
	for (int i = 0; i < m; i++)
	{
		int x, y;
		cin >> x >> y;
		x += 2;
		y += 2;
		arr[x][y] = 1;
		for (int j = x - 2; j <= x + 2;j++)
		{
			arr[j][y] = 1;
		}
		for (int j = y - 2; j <= y + 2; j++)
		{
			arr[x][j] = 1;
		}
		arr[x - 1][y  +1] = 1;
		arr[x + 1][y + 1] = 1;
		arr[x - 1][y -1] = 1;
		arr[x + 1][y - 1] = 1;
	}
	//下面是对于虫子的
	for (int i = 0; i < k; i++)
	{
		int x, y;
		cin >> x >> y;
		x += 2;
		y += 2;
		arr[x][y] = 1;
		for (int p = x - 2; p <= x + 2; p++)
		{
			for (int q = y - 2; q <= y + 2; q++)
			{
				arr[p][q] = 1;
			}
		}
	}
	int sum = 0;
	for (int i = 3; i <= n+2; i++)
	{
		for (int j = 3; j <= n+2; j++)
		{
			if (arr[i][j] == 0)
			{
				sum++;
			}
		}
	}
	cout << sum;
}

你可能感兴趣的:(算法)