什么是模拟

仅仅使用较简单的算法和数据结构的题目。

模拟顾名思义,就是按照题目的要求,一步步写出代码。

常见的模拟方法

a.用数学量和图形描述问题

计算机处理的是数学量。若要用计算机解决实际问题,需要把实际问题抽象为数学量,或者数字。比如,记事本把文字按 ASCII 码表转换为数字储存起 来,极品飞车把赛车的性能表示为数字,来权衡赛车的好坏。
一个漂亮的算法,需要用数学量表示出来。

有时,我们需要用更直观的图形来描述实际问题。

图论就是一个绝佳的方法。图是一种表示离散量间关系的形式,它也是一种思想,常被用于建模。同时,前人也为我们提供了很多现成的图论算法,能够解决很多常 见问题,这些将在之后被提到。

矩阵也是一种常见的方法。有时矩阵被表示成三角形的形式,比如“杨辉三角”。矩阵常常和数学有关,

在计算机计算时常常利用矩阵的递推式。这也将在后面被提 到。

b.模拟计算过程

模拟方法是最常见、最直接的算法构建方法。

有些模拟算法还涉及到图形和其他复杂的数据结构,这需要我们熟练地运用语言,巧妙地把其他关系转化为数学量间关系。

举例:
POJ1068

Description

Let S = s1 s2…s2n be a well-formed string of parentheses. S can be encoded in two different ways:
q By an integer sequence P = p1 p2…pn where pi is the number of left parentheses before the ith right parenthesis in S (P-sequence).
q By an integer sequence W = w1 w2…wn where for each right parenthesis, say a in S, we associate an integer which is the number of right parentheses counting from the matched left parenthesis of a up to a. (W-sequence).

Following is an example of the above encodings:
S (((()()())))

P-sequence       4 5 6666W-sequence      1 1 1456

Write a program to convert P-sequence of a well-formed string to the W-sequence of the same string.
Input

The first line of the input contains a single integer t (1 <= t <= 10), the number of test cases, followed by the input data for each test case. The first line of each test case is an integer n (1 <= n <= 20), and the second line is the P-sequence of a well-formed string. It contains n positive integers, separated with blanks, representing the P-sequence.

Output

The output file consists of exactly t lines corresponding to test cases. For each test case, the output line should contain n integers describing the W-sequence of the string corresponding to its given P-sequence.
Sample Input

2
6
4 5 6 6 6 6
9
4 6 6 6 6 8 9 9 9
Sample Output

1 1 1 4 5 6
1 1 2 4 5 1 1 3 9

问题描述:

一组括号 (((( ) ( ) ( ) ) ) )

有两种描述方法:

P方法:4 5 6 6 6 6 - 每一个)前,有几个(

W方法:1 1 1 4 5 6 - 每一个),向前数几个是跟它匹配的(

要求是根据P求W

解题思路:

1. 虽然没说,但是可以推测出,括号的个数是偶数;第一个一定是(,最后一个一定是)
2. P方法和W方法之间可能存在公式类的规律,但是要寻找不是特别简单
3. 手动分析过程中,我们知道,可以模拟出推到W的过程-模拟法
4. 括号匹配,一定是stack结构
5. 思路就是:根据P还原括号数组,利用stack,推到出W

#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main()
{int n;cin >> n;for (int i=0; i<n; i++){int m;cin >> m;string str;int leftpa = 0;for (int j=0; j<m; j++)  //使用stack,将p序列还原成括号序列{int p;cin >> p;for (int k=0; k<p-leftpa; k++) str += '(';str += ')';leftpa = p;}stack<int> s;for (string::iterator it=str.begin(); it!=str.end(); it++){//将左括号记为1,压入栈,扫到右括号,弹出栈顶元素,将新的栈顶元素加上已扫到的右括号的数目,if (*it=='(')s.push(1);else{int p = s.top(); s.pop();cout << p << " ";if (!s.empty()) s.top() += p;}}cout << endl;}return 0;
}

PS:

该程序设计当中用到了C++ STL中的stack

C++ Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,——也就是说实现了一个先进后出(FILO)的数据结构。

c++ stl栈stack的成员函数介绍:

empty() 堆栈为空则返回真

pop() 移除栈顶元素

push() 在栈顶增加元素

size() 返回栈中元素数目

top() 返回栈顶元素

想必搞懂了堆栈的内容,这样类似的题应该不算难解。

ACM竞赛学习整理--模拟算法举例POJ1068相关推荐

  1. NOIP竞赛学习整理--动态规划算法举例P1264

    动态规划 什么是动态规划? 动态规划是解决多阶段决策最优化问题的一种思想方法.所谓"动态",指的是在问题的多阶段决策中,按某一顺序,根据每一步所选决策的不同,将随即引起状态的转移, ...

  2. ACM竞赛学习整理--矩阵运算

    ACM竞赛学习整理–矩阵运算 了解矩阵类 [任务] 实现矩阵的基本变换 [接口] 结构体:Matrix 成员变量: int n,m 矩阵大小 int a[][] 矩阵内容 重载运算符: +.-.x 成 ...

  3. ACM竞赛学习整理开篇之01背包问题

    ACM竞赛学习整理开篇之01背包问题. 最近,偶然的一次机会让我关注信息奥赛的一些内容.发现其中的内容很有趣,是学习编程的一条很好的路径,又能很好地将数学和编程联系到一起.在csdn里看到了不少同好也 ...

  4. ACM竞赛学习指南(算法工程师成长计划)

    算法工程师成长计划 近年来,算法行业异常火爆,算法工程师年薪一般20万-100 万.越来越多的人学习算法,甚至很多非专业的人也参加培训或者自学,想转到算法行业.尽管如此,算法工程师仍然面临100万的人 ...

  5. ACM竞赛学习整理--Gauss求解POJ1166

    这道题目和1830比较类似,1830是求解的个数,这道题目相当于求线性方程组的整数解. 题目主要内容:有9个钟,其中9个操作方法来扳动上面的指针,每个操作每次只能把指针移动90度,且每个操作是对一组钟 ...

  6. ACM竞赛学习记录------迷宫寻宝(BFS广度优先搜索)

    题目 洪尼玛今天准备去寻宝,在一个n*n (n行, n列)的迷宫中,存在着一个入口.一些墙壁以及一个宝藏.由于迷宫是四连通的,即在迷宫中的一个位置,只能走到与它直接相邻的其他四个位置(上.下.左.右) ...

  7. ACM如何入门,ACM竞赛需要学习哪些算法?

    #################成绩################## 大一:2017年4月份"玲珑杯"河南工业大学2017年ACM程序设计大赛暨河南高校邀请赛,获得银奖 20 ...

  8. 对于ACM竞赛算法分类的整理

    用一个思维导图整理了竞赛涉及到的算法分类. 有机会可以和同学们讨论一下.

  9. 信息学竞赛学习资料整理

    信息学竞赛学习资料整理 一.总结 一句话总结:可以在网上获取各种免费视频资源,网上超多,也可以买书,也可以去刷题网站多做题 1.信息学竞赛书籍推荐? 信息学竞赛一本通 算法导论 组合数学 <CC ...

最新文章

  1. 实战SSM_O2O商铺_23【商铺列表】Controller层开发
  2. 安装visual studio 2013--【转】
  3. 10行Python代码自动清理电脑内重复文件
  4. C#中对文件进行选择对话框打开和保存对话框进行复制
  5. 15个JavaScript 编码小技巧
  6. SQL优化的若干原则
  7. 运算符之:5、位运算符(7个)
  8. 【转】RabbitMQ六种队列模式-1.简单队列模式
  9. python分类下取得所有子类_如何找到给定名称的类的所有子类?
  10. 使用 Nginx+SpringBoot+Redis 实现负载均衡以及session共享
  11. PHPExcel如何把该列的值设置为文本无科学计数?
  12. Android配置使用SQLite3
  13. matlab密钥生成,使用文件安装密钥安装产品
  14. 华为网络技术大赛笔记——服务器概述
  15. 蓝桥杯近三年初赛题之一(15年b组)
  16. OSError: [Errno 1] Operation not permitted: '/tmp/pip-g3bg0s-uninstall/System/Library/Frameworks/Pyt
  17. 小程序_图片剪切功能(支持多图片上传)
  18. 微信小程序识别字符串中的手机号,手机号高亮显示,并且可以点击这个手机号,拨打电话?
  19. OSChina 周四乱弹 ——今天家里只有我和女室友,我想……
  20. 关于SVN提交不成功问题

热门文章

  1. GitHub 新手详细教程转载,亲测可用
  2. 一文详解决策树算法模型
  3. python long函数_python 内置函数
  4. python 空值_数据库中的空值与NULL的区别以及python中的NaN和None
  5. python2:function
  6. VTK修炼之道64:纹理映射体绘制_三维纹理映射
  7. win32异常处理函数
  8. sockaddr与 sockaddr_in
  9. python-pygame激动时刻你我共享
  10. 【CyberSecurityLearning 64】SSRF