概述
文章目录
- 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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复