A-瑞神的序列
B-消消乐大师——Q老师
C-咕咕东学英语
A-瑞神的序列
题目
思路
遍历数据,记录上一个数字,当前数字与上一个数字不相同则段数+1。
代码
#include <iostream>
using namespace std;
int main() {
int a[100001],n;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
int temp=a[1],ans=1;
for(int i=2;i<=n;i++) {
if(a[i]!=a[i-1]) {
ans++;
temp=a[i];
}
}
cout<<ans<<endl;
return 0;
}
B-消消乐大师——Q老师
题目
思路
使用数组clear[40][40]记录某个位置的数组是否要清0。从左上角开始,对每一个元素检查其是否与右边两个元素相等,和其是否与下边两个元素相等,若相等,则将clear数组中3个位置的元素标记。最后输出原矩阵,若矩阵某一元素所在位置的clear被标记,则输出0。
代码
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
int n,m;
int a[40][40],clear[40][40];
int main() {
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++) {
cin>>a[i][j];
}
}
memset(clear,-1,sizeof clear);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (a[i][j] == a[i + 1][j] && a[i][j] == a[i + 2][j]) {
clear[i][j] = 1;
clear[i + 1][j] = 1;
clear[i + 2][j] = 1;
}
if (a[i][j] == a[i][j+1] && a[i][j] == a[i][j + 2]) {
clear[i][j] = 1;
clear[i][j+1] = 1;
clear[i][j+2] = 1;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++) {
if(clear[i][j]==1) cout<<0;
else cout<<a[i][j];
if(j!=m) cout<<' ';
}
cout<<endl;
}
return 0;
}
C-咕咕东学英语
题目
思路
只有A和B两种字母,则形如ABA,BAB,ABBB…BA,BAAA…AB都是delicious的,形如AB,BA,ABBB…B,BAAA…A都不是delicious的。计算非delicious会比较方便。可通过正序遍历数组求BBB…A型非Delicious,倒序遍历数组求ABBB…B型非delicious。另外,两次遍历中,AB和BA型非Delicious会被重复计算一次,故最后需要减去AB和BA的出现次数。
代码
#include <iostream>
using namespace std;
int a[1000001];;
long long int sum,n,index=1,re=0;
int main() {
char temp;
cin>>n;
sum=n*(n-1)/2;
for(int i=1;i<=n;i++) {
cin>>temp;
if(temp=='A') a[i]=1;
if(temp=='B') a[i]=0;
}
for(int i=1;i<=n-1;i++) {
if(a[i]!=a[i+1]) {
sum-=i-index+1;
index=i+1;
re++;
}
}
index=n;
for(int i=n;i>=2;i--) {
if(a[i]!=a[i-1]) {
sum-=index-i+1;
index=i-1;
}
}
cout<<sum+re<<endl;
return 0;
}