SDU程序设计第三次csp模拟

2024-04-10 05:38

本文主要是介绍SDU程序设计第三次csp模拟,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SDU程序设计第三次csp模拟

  • A瑞神的序列
    • 题目
    • 题解
    • C++代码
  • B消消乐大师——Q老师
    • 题目
    • 题解
    • C++代码
  • C咕咕东学英语
    • 题目
    • 题解
    • C++代码

A瑞神的序列

题目

题目
input&&output
input&&output
Sample

#input:
12
2 3 3 6 6 6 1 1 4 5 1 4
#output:
8

题解

读入的时候只要观察什么时候改变就好了(记录上一个数)
改变时计数加一

C++代码

#include<iostream>
#include<vector>
using namespace std;vector<int> v(0);
int n,c;
int main(){cin>>n;cin>>c;v.push_back(c);for(int i=1;i<n;i++){cin>>c;if(c!=v[v.size()-1]) v.push_back(c);}cout<<v.size()<<endl;return 0;
}

B消消乐大师——Q老师

题目

题目
input&&output
input&&output
Sample

#input1:
4 5 
2 2 3 1 2 
3 4 5 1 4 
2 3 2 1 3 
2 2 2 4 4#output1:
2 2 3 0 2 
3 4 5 0 4 
2 3 2 0 3 
0 0 0 4 4#input2:
4 5 
2 2 3 1 2 
3 1 1 1 1 
2 3 2 1 3 
2 2 3 3 3#output2:
2 2 3 0 2 
3 0 0 0 0 
2 3 2 0 3 
2 2 0 0 0

题解

能消去的一定满足如下三连的某种情况情况
    xx
x x x x xxx
因此我们对于  i,j  只要 关注 ( i,j | i,j+1 | i,j+2)  ( i,j | i,j+1 | i,j-1)  ( i,j | i,j-1 | i,j-2)  ( i,j | i-1,j | i-2,j)  ( i,j | i-1,j | i+1,j)   ( i,j | i+1,j | i+2,j)这六种情况是否有一种三项相同,由于会出现四个一样的因此 此处利用一个矩阵记录原矩阵根据原矩阵填结果矩阵

C++代码

#include<iostream>using namespace std;
const int maxn = 35;
int m,n;//n行m列 
int ele[maxn][maxn],ret[maxn][maxn];int main(){cin>>n>>m;for(int i=0;i<=1+n;i++)for(int j=0;j<=1+m;j++){//左右边界扩大防溢出 ele[i][j]=0;ret[i][j]=0;}for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin>>ele[i][j];for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(j!=1) cout<<" ";if((ele[i][j] == ele[i+1][j] && ele[i][j] == ele[i-1][j]) || (ele[i][j] == ele[i][j+1] && ele[i][j] == ele[i][j-1]) || (ele[i][j] == ele[i+2][j] && ele[i][j] == ele[i+1][j]) || (ele[i][j] == ele[i][j-1] && ele[i][j] == ele[i][j-2]) ||(ele[i][j] == ele[i-2][j] && ele[i][j] == ele[i-1][j]) || (ele[i][j] == ele[i][j+1] && ele[i][j] == ele[i][j+2]))cout<<0;else cout<<ele[i][j];}if(i!=n)cout<<endl;} return 0;
}

C咕咕东学英语

题目

题目
input&&output
input&&output
Sample

#input:
5 
AABBB
#output:
6

题解

本题如果暴力判断每个 子串显然会超时
因此我们有两种想法
1.寻找所有满足的类型 也就是含 AABB  AB(n)A  BA(n)B 或仅含 AA  或 BB的子串
2.寻找不满足的类型 然后用总子串个数减去 不满足类型  AB(n)  或 BA(n)
对于1来说类型过多不便于判断  且数量较多 不便于计算(可能也会超时
对于2来说就简单了许多,我们会发现这两种情况只会出现在有交界处的地方
如: AABBB  只会出现在 2、3位置  因此不存在的有  AB ABB ABBB AAB(右向左看就是 BAA BA重复了)
通过刚刚那个例子大概就表达了我的计算方法
首先计算字符串的段数
两次遍历:第一次 正向遍历 从第二段开始  不存在的个数 即为每段段长第二次 逆向遍历 从导数第二段开始  不存在的即为 每段断肠减1(因为正向时 AB(或BA)计算过)

C++代码

#include<iostream>
#include<vector>
using namespace std;
string str;
vector<long long> v(0);
int main(){long long n;cin>>n>>str;long long cnt = 0,num=1;for(int i=1;i<n;i++){if(str[i] == str[i-1]){num++;}else{v.push_back(num);num=1;}}v.push_back(num);for(int i=1;i<v.size();i++) cnt-=v[i];for(int i=v.size()-2;i>=0;i--) cnt-=v[i]-1;//不满足个数for(int i=1;i<n;i++) cnt+=i; cout<<cnt<<endl;return 0;
}

这篇关于SDU程序设计第三次csp模拟的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/890186

相关文章

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

usaco 1.2 Transformations(模拟)

我的做法就是一个一个情况枚举出来 注意计算公式: ( 变换后的矩阵记为C) 顺时针旋转90°:C[i] [j]=A[n-j-1] [i] (旋转180°和270° 可以多转几个九十度来推) 对称:C[i] [n-j-1]=A[i] [j] 代码有点长 。。。 /*ID: who jayLANG: C++TASK: transform*/#include<

hdu4431麻将模拟

给13张牌。问增加哪些牌可以胡牌。 胡牌有以下几种情况: 1、一个对子 + 4组 3个相同的牌或者顺子。 2、7个不同的对子。 3、13幺 贪心的思想: 对于某张牌>=3个,先减去3个相同,再组合顺子。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOExcepti

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

【算法专场】模拟(下)

目录 前言 38. 外观数列 算法分析 算法思路 算法代码 1419. 数青蛙 算法分析 算法思路 算法代码  2671. 频率跟踪器 算法分析 算法思路 算法代码 前言 在前面我们已经讲解了什么是模拟算法,这篇主要是讲解在leetcode上遇到的一些模拟题目~ 38. 外观数列 算法分析 这道题其实就是要将连续且相同的字符替换成字符重复的次数+

模拟实现vector中的常见接口

insert void insert(iterator pos, const T& x){if (_finish == _endofstorage){int n = pos - _start;size_t newcapacity = capacity() == 0 ? 2 : capacity() * 2;reserve(newcapacity);pos = _start + n;//防止迭代

C语言程序设计(数据类型、运算符与表达式)

一、C的数据类型 C语言提供的数据类型: 二、常量和变量 2.1常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。 常量区分为不同的类型: 程序中用#define(预处理器指令)命令行定义变量将代表常量,用一个标识符代表一个常量,称为符合常量。 2.2变量 变量代表内存中具有特定属性的一个存储单元,用来存放数据,在程序运行期间,这些值是可以 改变的。 变