CSP-M3

2023-05-16

文章目录

    • T1 瑞神的序列
    • 题目描述:
    • 输入描述:
    • 输出描述:
    • 样例输入:
    • 样例输出:
    • 数据组成:
    • 题目分析:
    • 代码:
    • T2 消消乐大师——Q老师
    • 题目描述:
    • 输入描述:
    • 输出描述:
    • 样例输入1
    • 样例输出1
    • 样例输入2
    • 样例输出2
    • 数据组成:
    • 题目分析:
    • 代码:
    • T4 咕咕东学英语
    • 题目描述:
    • 输入描述:
    • 输出描述:
    • 样例输入:
    • 样例输出:
    • 样例解释:
    • 数据组成:
    • 题目分析:
    • 代码:

T1 瑞神的序列

题目描述:

瑞神的数学一向是最好的,连强大的咕咕东都要拜倒在瑞神的数学水平之下,虽然咕咕东很苦恼,但是咕咕东拿瑞神一点办法都没有。 5.1期间大家都出去玩了,只有瑞神还在孜孜不倦的学习,瑞神想到了一个序列,这个序列长度为 n,也就是一共有 n个数,瑞神给自己出了一个问题:数列有几段? 段的定义是连续的相同的最长整数序列

输入描述:

输入第一行一个整数n,表示数的个数。
接下来一行n个空格隔开的整数,表示不同的数字。

输出描述:

输出一行,这个序列有多少段 。

样例输入:

12
2 3 3 6 6 6 1 1 4 5 1 4

样例输出:

8

数据组成:

在这里插入图片描述

题目分析:

该题题意可以简述为对于一个序列,每连续的相同数字为一段,找出有多少段。
以样例来说:可以分为8段,分别为[2],[3 3],[6 6 6],[1 1],[4],[5],[1],[4]。
简单的遍历这个序列,初始化pre=a[0],每遇到不同的数字,段数cnt++,并及时更新当前数字pre=a[i],最后输出cnt总的段数即可。

代码:

#include<iostream>
#include<stdio.h>
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 pre=a[0];int cnt=1;
	for(int i=0;i<n;i++)
	{
		if(a[i]!=pre)
		{
			cnt++;
			pre=a[i];
		}
	}
	cout<<cnt<<endl;
	return 0;
} 

T2 消消乐大师——Q老师

题目描述:

Q老师是个很老实的老师,最近在积极准备考研。Q老师平时只喜欢用Linux系统,所以Q老师的电 脑上没什么娱乐的游戏,所以Q老师平时除了玩Linux上的赛车游戏SuperTuxKart之外,就是喜欢消消乐了。 游戏在一个包含有 n 行 m 列的棋盘上进行,棋盘的每个格子都有一种颜色的棋子。当一行或一列 上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。 一个棋子可能在某一行和某一列同时被消除。 由于这个游戏是闯关制,而且有时间限制,当Q老师打开下一关时,Q老师的好哥们叫Q老师去爬泰山去了,Q老师不想输在这一关,所以它来求助你了!!

输入描述:

输入第一行包含两个整数n,m,表示行数和列数 ,接下来n行m列,每行中数字用空格隔开,每个数字代表这个位置的棋子的颜色。数字都大于0。

输出描述:

输出n行m列,每行中数字用空格隔开,输出消除之后的棋盘。(如果一个方格中的棋子被消除, 则对应的方格输出0,否则输出棋子的颜色编号。)

样例输入1

4 5 
2 2 3 1 2 
3 4 5 1 4
2 3 2 1 3 
2 2 2 4 4

样例输出1

2 2 3 0 2 
3 4 5 0 4
2 3 2 0 3 
0 0 0 4 4

样例输入2

4 5 
2 2 3 1 2 
3 1 1 1 1 
2 3 2 1 3
2 2 3 3 3

样例输出2

2 2 3 0 2 
3 0 0 0 0 
2 3 2 0 3 
2 2 0 0 0

数据组成:

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

题目分析:

  • 根据题给消消乐的规则,分别遍历n行m列的行和列,对于所有的行和列,依照T1的方式找出该行或者该列的所有连续的相同数字的段数以及该连续段的个数,用数组tol[cnt]表示。然后对于该行或者该列的tol数组,进行遍历,找到所有tol[cnt]>=3的,并将其对应的方阵中的数标记为vis=true。
  • 然后对于n行m列的数字方阵进行遍历,如果遇到vis[i]][j],那么就将其置0,否则直接输出a[i][j]即可。
  • 注意1:在这里n行m列的方阵的下标是以0开始,而在tol数组中下标是以1开始,在进行数的vis标记的时候,需要注意下标转换
  • 注意2:因为会出现行和列共用一个数的情况,所以不能直接在行和列的连续数段的寻找遍历中,直接置0,而是应该先标记所有的能被消除的数,在输出的时候统一置0

代码:

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
const int maxn=35;
int a[maxn][maxn];
bool vis[maxn][maxn];
int tol[maxn];
void erase(int n,int m)
{
	for(int i=0;i<n;i++)
	{
		int cnt=1;
		memset(tol,0,sizeof(tol));
		int pre=a[i][0];
		for(int j=0;j<m;j++)
		{
			if(a[i][j]!=pre)
			{
				cnt++;
				tol[cnt]++;
				pre=a[i][j];
			}
			else
			{
				tol[cnt]++;
			}
		}
		int sum=0;
		for(int k=1;k<=cnt;k++)
		{
			if(tol[k]>=3)
			{
				int temp=tol[k];int r=sum;
				while(temp--)
				{
					vis[i][r]=true;
					r++;
				}
			}
			sum+=tol[k];
		}
	}
}
void erase1(int m,int n)
{
	for(int i=0;i<m;i++)
	{
		int cnt=1;
		memset(tol,0,sizeof(tol));
		int pre=a[0][i];
		for(int j=0;j<n;j++)
		{
			if(a[j][i]!=pre)
			{
				cnt++;
				tol[cnt]++;
				pre=a[j][i];
			}
			else
			{
				tol[cnt]++;
			}
		}
		int sum=0;
		for(int k=1;k<=cnt;k++)
		{
			if(tol[k]>=3)
			{
				int temp=tol[k];int r=sum;
				while(temp--)
				{
					vis[r][i]=true;
					r++;
				}
			}
			sum+=tol[k];
		}
	}
}
int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			cin>>a[i][j];
		}
	}
	memset(vis,false,sizeof(vis));
	erase(n,m);
	erase1(m,n);
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			if(vis[i][j])
			{
				a[i][j]=0;
			}
			if(j!=m-1)
			{
				cout<<a[i][j]<<" ";
			}
			else
			{
				cout<<a[i][j];
			}	
		}
		if(i!=n-1)
		{
			cout<<endl;
		}
	}
	return 0; 
} 

T4 咕咕东学英语

题目描述:

咕咕东很聪明,但他最近不幸被来自宇宙的宇宙射线击中,遭到了降智打击,他的英语水平被归 零了!这一切的始作俑者宇宙狗却毫不知情! 此时咕咕东碰到了一个好心人——TT,TT在吸猫之余教咕咕东学英语。今天TT打算教咕咕东字母A 和字母B,TT给了咕咕东一个只有大写A、B组成的序列,让咕咕东分辨这些字母。 但是咕咕东的其他学科水平都还在,敏锐的咕咕东想出一个问题考考TT:咕咕东问TT这个字符串 有多少个子串是Delicious的。 TT虽然会做这个问题,但是他吸完猫发现辉夜大小姐更新了,不想回答这个问题,并抛给了你, 你能帮他解决这个问题吗?
Delicious定义:对于一个字符串,我们认为它是Delicious的当且仅当它的每一个字符都属于一个大于1的回文子串中

输入描述:

输入第一行一个正整数n,表示字符串长度, 接下来一行,一个长度为n,只由大写字母A、B构成的字符串。

输出描述:

输出仅一行,表示符合题目要求的子串的个数。

样例输入:

5 
AABBB

样例输出:

6

样例解释:

对于该样例,符合条件的六个子串分别是:
s1-s4 AABB
s1-s5 AABBB
s3-s4 BB
s3-s5 BBB
s4-s5 BB

数据组成:

在这里插入图片描述

题目分析:

该题要找出满足条件的delicious序列,我一开始的想法是对于所有能构成的子序列,进行是否是回文序列的判断,如果是,则ans++,放入栈中,如果不是,则对子序列进行字符的拆分,看是否属于某个回文子序列,是的话ans++。

但是根据数据点的复杂度e5,明显复杂度过不了。(注意根据数据范围,变量应使用long long int)

再进一步分析题意,题目关键点在于只有A,B两种字符:

  • 那么对于两个字符的子序列而言可能的组合只有AA,BB,AB,BA。很明显AA,BB是一定属于delicious序列的。

  • 对于三个字符的子序列而言,可能的组合有AAA,AAB,ABB,BBB,BBA,BAA。很明显AAA,BBB是属于delicious序列的,那么其他为什么不属于呢,AAB,BAA中B不属于某个回文序列,ABB,BBA中A不属于某个回文序列。

  • 对于四个字符的子序列而言,可能的组合AAAA,AAAB,AABB,ABBB,BBBB,BBBA,BBAA,BAAA。很明显AAAA,AABB,BBAA,BBBB是属于delicious序列的,那么其他为什么不属于呢,AAAB,BAAA中B不属于某个回文序列,ABBB,BBBA中A不属于某个回文序列。


    归纳分析可得对于一个子序列而言,其是否是delicious序列,关键在于该序列的两端XX…YY,如果XX不同同或者YY不同,那么这个序列就不属于delicious序列,形如ABB。

以n的复杂度的方式,分别从前遍历和从后遍历字符串,分别找到尾端YY的序列和前端XX的序列,找出以XX或者YY为端点的不符合条件(X!=X||Y!=Y)的所有子序列数目,那么这些就是不满足delicious序列的子序列,用总的可以生成的长度大于等于2的子序列数目减去不符合delicious定义的子序列数目即为满足条件的子序列数目。

代码:

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
bool flag=true;
int solve(string x)//判断是否是回文序列 
{
	vector<char> q;
	q.clear(); 
	for(int i=0;i<x.size();i++)
	{
		q.push_back(x[i]);
	}
	int len=q.size();
	for(int i=0;i<len;i++)
	{
		char temp=q.back();
		if(temp!=q[i])
		{
			flag=false;
			break;
		}
		q.pop_back();
	}
}
bool solve1(string x)
{
	int len=x.size();
	if(x[0]==x[1]&&x[len-1]==x[len-2])
	{
		return true;
	}
	else
	{
		return false;
	}
}
int main()
{
	long long int n;
	cin>>n;
	char *a=new char[n];
	long long int ans=0;
	long long int sum=n*(n-1)/2;
	for(int i=0;i<n;i++)
	{
		cin>>a[i];	
	}
	long long int k=0;
	long long int cnt=0;
	ans=sum;cnt=1;
	for(int i=1;i<n;i++)
	{
		if(a[i]!=a[i-1])
		{
			ans-=cnt-1;
			cnt=1;
			//cout<<cnt<<" "<<ans<<endl;
		} 
		else if(a[i]==a[i-1])
		{
			cnt++;
		}
	}
	cnt=1;
	for(int i=n-2;i>=0;i--)
	{
		if(a[i]!=a[i+1])
		{
			ans-=cnt;
			cnt=1;
			//cout<<cnt<<" "<<ans<<endl;
		} 
		else if(a[i]==a[i+1])
		{
			cnt++;
		}
	} 
	cout<<ans<<endl; 
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CSP-M3 的相关文章

  • CCF-CSP【202303-3 LDAP】C++

    CCF CSP 202303 3 LDAP C 43 43 CCF真题网址 第一次提交结果超时 只有20分 题目思路 我的思路较为简单 xff0c 即对于每个匹配表达式 xff0c 遍历N个用户 xff0c 验证是否匹配 对于每个表达式有两
  • CSP:201512-3 画图(C++)

    题目 原题传送门 题目思路 1 形成画布 xff0c 根据输入长宽初始化画布 xff0c 将全部像素都初始化为 39 39 2 输入操作 xff0c 根据输入的q个操作依次对画布进行修改 w 61 0 画线段操作 xff0c 根据输入的x1
  • csp-m4

    反思 此次模测做的不太理想 xff0c t1因为一个循环条件写错导致只拿到了3个点的分数 xff0c t2是读题不仔细没有搞清输出的数据同时对于数据范围估计也产生了错误 xff0c 导致爆0 xff0c t4看到树就犯怵的习惯还有待克服 x
  • CSP-M3

    文章目录 T1 瑞神的序列题目描述 xff1a 输入描述 xff1a 输出描述 xff1a 样例输入 xff1a 样例输出 xff1a 数据组成 xff1a 题目分析 xff1a 代码 xff1a T2 消消乐大师 Q老师题目描述 xff1
  • CCP-CSP 201912-5 魔数 暴力25

    原题链接 xff1a CCP CSP 201912 5 魔数 线段树是写不来的 span class token macro property span class token directive hash span span class
  • CCF-CSP考试介绍以及复习技巧指导

    CCF CSP考试时间及费用 时间一般是每年3 9 12月的中旬 xff0c 报名时间一般也是提前一个月 xff0c 不固定 非计算机协会会员300元 次 xff0c 会员180元 次 xff08 学生会员需缴纳50元 年的会费 xff09
  • CCF CSP 2021-09-2 非零段划分 题解及满分代码(C++11)

    文章目录 问题描述问题分析70分解法满分解法 问题描述 题目描述 A 1 A 2
  • CCF CSP 2021-04-2 邻域均值 题解及满分代码(C++11)

    文章目录 题目描述问题分析70分解法满分解法 题目描述 现给定邻域参数 r 和阈值 t xff0c 试统计输入灰度图像中有多少像素处于较暗区域 输入格式 输入共 n 43 1 行 输入的第一行包含四个用空格分隔的正整数 n L r 和 t
  • CSP考试 2016年04月第3题 路径解析 C++实现

    表示本目录 xff0c 例如 d1 f1 指定的就是 d1 f1 如果有多个连续的 出现 xff0c 其效果等同于一个 绝对路径 xff1a 以 符号开头 xff0c 表示从根目录开始构建的路径 相对路径 xff1a 不以 符号开头 xff
  • 针对CSP-T1,T2的练习

    文章目录 题目1问题描述样例输入样例输出 解题思路代码 题目2问题描述样例输入样例输出 解题思路代码 题目1 问题描述 给出n个数 xff0c zjm想找出出现至少 n 43 1 2次的数 xff0c 现在需要你帮忙找出这个数是多少 xff
  • csp 201312-4有趣的数

    题意 xff1a 问题描述 我们把一个数称为有趣的 xff0c 当且仅当 xff1a 1 它的数字只包含0 1 2 3 xff0c 且这四个数字都出现过至少一次 2 所有的0都出现在所有的1之前 xff0c 而所有的2都出现在所有的3之前
  • CSP-S 模拟53

    中下游水准 xff0c 暴力分没拿全 xff0c T1水了 T1 u 两个差分数组水掉 xff08 竖着一个 xff0c 斜着一个 xff09 T2 v 状压 43 记忆化搜索 xff0c 对于sta 61 1 lt lt 30 用hash
  • CSP-S 模拟测试 51 题解

    考试过程 xff1a 惯例先看一遍三道题 xff0c T1 一开始反应要求割点 xff0c 但是这是有向图 xff0c 肯定不能求割点 xff0c 康了一下数据范围 xff0c 有40 是树的 xff0c 还不错 xff0c 决定待会在打
  • CSP 202305-1 重复局面

    题目背景 国际象棋在对局时 同一局面连续或间断出现3次或3次以上 可由任意一方提出和棋 问题描述 国际象棋每一个局面可以用大小为 8 8 的字符数组来表示 其中每一位对应棋盘上的一个格子 六种棋子王 后 车 象 马 兵分别用字母 k q r
  • CCF CSP 中国计算机学会-CCF计算机软件能力认证(计算机水平测试)-简介-详情

    CCF gt gt 简介 中国计算机学会 英文名为China Computer Federation 简称CCF 是由从事计算机及相关科学技术领域的科研 教育 开发 生产 管理 应用和服务的个人及单位自愿结成 依法登记成立的全国性 学术性
  • CCF-CSP真题《202303-1 田地丈量》思路+python,c++,java满分题解

    想查看其他题的真题及题解的同学可以前往查看 CCF CSP真题附题解大全 试题编号 202303 1 试题名称 田地丈量 时间限制 1 0s 内存限制 512 0MB 问题描述 问题描述 西西艾弗岛上散落着 n 块田地 每块田地可视为平面直
  • CCF-CSP真题《202305-1 重复局面》思路+python,c++满分题解

    想查看其他题的真题及题解的同学可以前往查看 CCF CSP真题附题解大全 试题编号 202305 1 试题名称 重复局面 时间限制 1 0s 内存限制 512 0MB 问题描述 题目背景 国际象棋在对局时 同一局面连续或间断出现3次或3次以
  • csp试题1:小明种苹果

    csp试题1 小明种苹果 题目 分析 代码 总结 题目 题目描述 小明在他的果园里种了一些苹果树 为了保证苹果的品质 在种植过程中要进行若干轮疏果操作 也就是提前从树上把不好的苹果去掉 第一轮疏果操作开始前 小明记录了每棵树上苹果的个数 每
  • CSP-J (NOIP普及组) 历年复赛真题考察内容(1998~2021)

    TZOJ题目分类 本博客原文地址 https www cnblogs com BobHuang p 14522022 html 其中 1 较简单题26题左右 2 动态规划17题 其中9题较好做 3 模拟 阅读题目将问题抽象建模写出程序 为1
  • CSP 202209-1 如此编码

    答题 题目就是字多 include

随机推荐

  • Week11 C-必做题 11-3

    题目 Julius Caesar 曾经使用过一种很简单的密码 对于明文中的每个字符 xff0c 将它用它字母表中后 5 位对应的字符来代替 xff0c 这样就得到了密文 比如字符 A 用 F 来代替 如下是密文和明文中字符的对应关系 密文A
  • NO.4模测之TT数鸭子

    TT数鸭子 时间限制 空间限制 1S 256MB 题目描述 这一天 TT因为疫情在家憋得难受 在云吸猫一小时后 xff0c TT决定去附近自家的山头游玩 TT来到一个小湖边 看到了许多在湖边嬉戏的鸭子 xff0c T顿生羡慕 此时他发现每一
  • PS2020安装时出现184错误解决办法(详细步骤

    首先一些之前安装过Photoshop 的伙伴们再次安装就会出现 184错误 xff0c 那么如何解决涅 xff1f 见如下步骤 亲测有效 1 打开C programfiles commonfiles 找到adobe文件夹 xff0c 把它删
  • 【ROS2 入门】虚拟机环境 ubuntu 18.04 ROS2 安装

    大家好 xff0c 我是虎哥 xff0c 从今天开始 xff0c 我将花一段时间 xff0c 开始将自己从ROS1切换到ROS2 xff0c 做为有别于ROS1的版本 xff0c 做了很多更新和改变 xff0c 我还是很期待自己逐步去探索R
  • 如何在Markdownpad2中显示数学公式

    前言 说句实话 xff0c 我觉得markdown比LaTeX方便多了 xff0c 但是就是数学公式方面太麻烦了 xff0c 所以只好想方设法找办法 Markdown pad2的安装 如果你还没有安装markdownpad2的话 xff0c
  • 如何在其他盘安装office

    office 2019安装详细过程 把office安装在D盘 目录 office 2019安装详细过程把office安装在D盘前言声明下载Office准备工作正式安装Office的时刻到了无法安装 xff0c 错误 xff0c 需要重启 x
  • 接口回调(笔记

    接口回调讲解 回调定义回调机制回调意义接口回调的实现步骤参考 网上看了一堆 xff0c 感觉有点零散 xff0c 我自己总结一下 看评论区说存在很多问题 xff0c 我读了一下 xff0c 雀氏存在一些 xff0c 非常感谢批评指正 xff
  • Weka下载安装详解

    目录 前言Weka下载Weka安装Weka启动 前言 如果你没有安装Java的话 xff0c 请看这里 xff0c 选择合适的Java版本 xff0c 这里我选用的是java11 选择jdk8也可以 xff0c 它有jre xff0c 11
  • Android Studio安装教程

    Android Studio详细安装教程 1 Java环境配置2 Android Studio的安装 1 Java环境配置 这里Android开发基于Java语言 xff0c 所以先配置Java环境 首先选择合适的jdk版本 xff0c 随
  • 活动的四种启动模式详解

    android launchMode 目录 android launchMode前言概念说明standardsingleTopsingleTasksingleInstance Codes演示说明standard代码singleTop代码si
  • VS2019切换中英文

    Visual Studio2019语言包切换1 打开安装程序2 选择语言包3 一系列操作 Visual Studio2019语言包切换 忘了设置语言包来着 xff0c 它默认中文了 xff0c 总觉得每次找东西看起来怪怪的 如果已安装了英语
  • Java关键字super解释

    目录 前言 xff08 废话文学 xff09 前言 xff08 定义 xff09 super 之构造方法super 之成员函数super 之成员变量结束语 前言 xff08 废话文学 xff09 又是看了一大堆文字介绍 xff0c 非常系统
  • 程序员的心得体会

    目录 前言工作学习 xff08 正式严肃 xff09 emo转乐观 前言 这是一篇丰富多彩 摸鱼 的文章 一呢是分享一下子自己迈入程序员工作了2个月的感受 xff0c 还有呢就是多方面交谈 xff0c 或许给点人生建议 xff0c 还有说说
  • VisualStudioCode:Java 11 or more recent is required to run. Please download and install a recent JDK

    从7月22日起 xff0c 今后vs code将不再支持用java8运行java插件 xff0c 需要使用java11 才能进行Visual Studio Code的编译 xff1a 解决方法 xff1a 先下载一个java11的jdk j
  • 【GStreamer】MP4文件种提取H264 字节流数据保存

    大家好 xff0c 我是虎哥 xff0c 简短的分享一个小技巧 xff0c 也作为自己的记录留用 一般MP4文件和MKV文件都是我么从网络上比较容易获取的 xff0c 但是我们用来做目标识别和检测的视频输入需要单纯的视频文件 xff0c 下
  • A-咕咕东的奇遇

    题目 xff1a 咕咕东是个贪玩的孩子 xff0c 有一天 xff0c 他从上古遗迹中得到了一个神奇的圆环 这个圆环由字母表组成首尾相接的环 xff0c 环上有一个指针 xff0c 最初指向字母a 咕咕东每次可以顺时针或者逆时针旋转一格 例
  • A-DDL的恐惧

    题目 xff1a ZJM 有 n 个作业 xff0c 每个作业都有自己的 DDL xff0c 如果 ZJM 没有在 DDL 前做完这个作业 xff0c 那么老师会扣掉这个作业的全部平时分 所以 ZJM 想知道如何安排做作业的顺序 xff0c
  • C-平衡字符串

    题目 xff1a 一个长度为 n 的字符串 s xff0c 其中仅包含 Q W E R 四种字符 如果四种字符在字符串中出现次数均为 n 4 xff0c 则其为一个平衡字符串 现可以将 s 中连续的一段子串替换成相同长度的只包含那四个字符的
  • week11-作业(必做题)

    文章目录 A 必做题11 1题目 xff1a 输入格式 xff1a 输出格式 xff1a 样例输入 xff1a 样例输出 xff1a 题目分析 xff1a 代码 xff1a B 必做题11 2题目 xff1a 输入格式 xff1a 输出格式
  • CSP-M3

    文章目录 T1 瑞神的序列题目描述 xff1a 输入描述 xff1a 输出描述 xff1a 样例输入 xff1a 样例输出 xff1a 数据组成 xff1a 题目分析 xff1a 代码 xff1a T2 消消乐大师 Q老师题目描述 xff1