我是靠谱客的博主 和谐口红,最近开发中收集的这篇文章主要介绍week12(csp练习题)T1T2T3,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • T1
    • 题意
    • 思路
    • 代码
  • T2
    • 题意
    • 思路
    • 总结
    • 代码
  • T3
    • 题意
    • 思路
    • 代码

T1

题意

在这里插入图片描述

思路

此题是T1级别的题,我们需要做的就是先进行排序,让整个序列变的有序,然后进行一个临时temp的设立,一旦这个temp发生一次变化,那么我们的结果加一;

代码

#include<iostream>
using namespace std;
int main()
{
	int n;
	cin >> n;
	int* a = new int[n];
	for (int i = 0; i < n; i++)
		cin >> a[i];
	int temp = a[0],ans=1;
	for (int i = 1; i < n; i++)
	{
		if (a[i] != temp)
		{
			temp = a[i];
			ans++;
		}
		else
			temp = a[i];
	}
	cout << ans << endl;
	return 0;
}

T2

题意

在这里插入图片描述在这里插入图片描述

思路

由于此题的数据范围小,所以我们直接暴力即可,对于此题,我们将每一个点的上下左右全部查一遍,如果上=下=本身,则标记上、下、自己,如果左=右=本身,则标记左、右、本身,最后我们只需要将所有被标记的变为0即可;

总结

此题犯的错误,a == b == c;这种是不行的,必须是a == b&&b == c;

代码

#include<iostream>
#include<queue>
using namespace std;
struct node
{
	int value;
	bool xiao;
	int idx;
	int idy;
	node()
	{
		value = -1;
		xiao = false;
		idx = -1;
		idy = -1;
	}
};
int n, m;
node a[35][35];
int dx[] = { -1,1,0,0 };
int dy[] = { 0,0,1,-1 };
queue<pair<int, int>> q;
void bfs()
{
	for(int i=0;i<n;i++)
		for (int j = 0; j < m; j++) {
			node up, below, left, right;
			for (int k = 0; k < 4; k++)
			{
				int tex = dy[k] + i;
				int tey = dx[k] + j;
				if (tex >= 0 && tex < n && tey >= 0 && tey < m)
				{
					if (k == 0)
						left = a[tex][tey];
					if (k == 1)
						right = a[tex][tey];
					if (k == 2)
						below = a[tex][tey];
					if (k == 3)
						up = a[tex][tey];
				}
			}
			if (right.value == left.value &&right.value== a[i][j].value && right.value != -1)
			{
				a[left.idx][left.idy].xiao = true;
				a[right.idx][right.idy].xiao = true;
				a[i][j].xiao = true;
			}
			if (up.value == below.value&&up.value == a[i][j].value && up.value != -1)
			{
				a[up.idx][up.idy].xiao = true;
				a[below.idx][below.idy].xiao = true;
				a[i][j].xiao = true;
			}
		}
}
int main()
{
	cin >> n >> m;
	for (int i = 0; i < n; i++)
		for (int j = 0; j < m; j++) {
			cin >> a[i][j].value;
			a[i][j].idx = i;
			a[i][j].idy = j;
			a[i][j].xiao = false;
		}
	bfs();
	for (int i = 0; i < n; i++)
		for (int j = 0; j < m; j++)
		{
			if (a[i][j].xiao == true)
				a[i][j].value = 0;
		}
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j <m-1; j++) {

			cout << a[i][j].value << " ";
		}
		cout<<a[i][m-1].value;
		cout << endl;
	}
	return 0;
}

T3

题意

在这里插入图片描述
在这里插入图片描述

思路

此题就是将所有的区间求出来为C(n,2),然后去掉那些不合法的区间,需要判断是连续的区间,即判断相邻是否相等,如果不相等,则就要去除这个区间;需要注意的是,AB会被计算两次;

代码

#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int main()
{
	int n;
	cin>>n;
	string s;
	cin>>s;
	long long int ans,a=0;//所有区间长度大于2的区间;根据C(n,2)求取
	ans=(long long int)(n-1)*n/2;
	
	for(int i=0;s[i];i++)
	{
		if(s[i]!=s[i+1])
		{
			if(s[i+1])
				ans-=(i-a);
			if(a)
				ans-=(i-a+1);
			a=i+1;

		}
	}
	cout<<ans<<endl;
	return 0;
}

最后

以上就是和谐口红为你收集整理的week12(csp练习题)T1T2T3的全部内容,希望文章能够帮你解决week12(csp练习题)T1T2T3所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部