【数据结构】Tournament Chart
Tournament Chart
题目描述
JAG is conducted as a knockout tournament. This year, N contestants will compete in JAG. A tournament chart is represented as a string. '[[a-b]-[c-d]]' is an easy example. In this case, there are 4 contestants named a, b, c, and d, and all matches are described as follows:
Match 1 is the match between a and b.
Match 2 is the match between c and d.
Match 3 is the match between [the winner of match 1] and [the winner of match 2].
More precisely, the tournament chart satisfies the following BNF:
<winner> ::= <person> | "[" <winner> "-" <winner> "]"
<person> ::= "a" | "b" | "c" | ... | "z"
You, the chairperson of JAG, are planning to announce the results of this year's JAG competition. However, you made a mistake and lost the results of all the matches. Fortunately, you found the tournament chart that was printed before all of the matches of the tournament. Of course, it does not contains results at all. Therefore, you asked every contestant for the number of wins in the tournament, and got N pieces of information in the form of "The contestant ai won vi times".
Now, your job is to determine whether all of these replies can be true.
输入
S
a1 v1
:
aN vN
S represents the tournament chart. S satisfies the above BNF. The following N lines represent the information of the number of wins. The (i+1)-th line consists of a lowercase letter ai and a non-negative integer vi (vi≤26) separated by a space, and this means that the contestant ai won vi times. Note that N (2≤N≤26) means that the number of contestants and it can be identified by string S. You can assume that each letter ai is distinct. It is guaranteed that S contains each ai exactly once and doesn't contain any other lowercase letters.
输出
样例输入
[[m-y]-[a-o]]
o 0
a 1
y 2
m 0
样例输出
Yes
【题解】
类似于表达式求值,每次都把比赛中较大者减1,最后判断是否全为0即为Yes。
#include<bits/stdc++.h>
using namespace std; unordered_map <char,int> Hash;
stack <char> Ops;
stack <char> Nums;
bool f ; void Calc( ){
char v = Nums.top() ; Nums.pop();
char u = Nums.top() ; Nums.pop();
/*
if( !( Hash[u] == Hash[v] + 1 || Hash[v] == Hash[u] + 1 ) ){
f = false ; cout << u << " # " << v << endl;
cout << Hash[u] << " # " << Hash[v] << endl;
}
*/
if( Hash[u] > Hash[v] ) Nums.push(u) , Hash[u] -- ;
else Nums.push(v) , Hash[v] -- ;
Ops.pop();
} int main()
{
ios_base :: sync_with_stdio(false);
cin.tie(NULL) , cout.tie(NULL); string s ;
cin >> s ; f = true;
char ch ;
int len = s.length() , v , m = ;
for(int i=;i<len;i++) m += ('a' <= s[i] && s[i] <= 'z' ); for(int i=;i<m;i++){
cin >> ch >> v ;
Hash[ch] = v ;
}
/*
for(int i=0;i<26;i++){
cout << 'a' + i << " " << Hash['a'+i] << endl;
}
*/ for(int i = ; i<len ; i++ ){
if( s[i] == '[' ){
Ops.push(s[i]);
}else if( 'a' <= s[i] && s[i] <= 'z' ){
Nums.push(s[i]);
}else if( s[i] == ']' ){
while( Ops.top() != '[' ) Calc() ;
Ops.pop();
}else if( s[i] == '-'){
Ops.push(s[i]);
}
/*else{
puts(" Invaild Operator \n");
}*/
} /*
for(int i=0;i<26;i++){
cout << char('a' + i) << " " << Hash['a'+i] << endl;
}
*/ //cout << s << endl;
if( f ){
//int t = 0 ;
for(int i=;i<;i++){
if( Hash['a'+i] != )
f = false ;
}
//if( t ) f = false ;
}
if( f ){
printf("Yes\n");
}else{
printf("No\n");
}
return ;
} /* [[[a-b]-c]-[d-e]]
a 3
b 0
c 0
d 1
e 0 */
【数据结构】Tournament Chart的更多相关文章
- Tournament Chart【模拟+vector+map+string】
Tournament Chart 传送门:链接 来源:UPC10889 题目描述 In 21XX, an annual programming contest, Japan Algorithmist ...
- Chart.js中文文档-雷达图
雷达图或蛛网图(Radar chart) 简介 A radar chart is a way of showing multiple data points and the variation bet ...
- 数据结构与算法 Big O 备忘录与现实
不论今天的计算机技术变化,新技术的出现,所有都是来自数据结构与算法基础.我们需要温故而知新. 算法.架构.策略.机器学习之间的关系.在过往和技术人员交流时,很多人对算法和架构之间的关系感 ...
- 一款开源且功能强大的C#甘特图控件.NET Winforms Gantt Chart Control
甘特图在项目管理中非常重要,甘特图的思想比较简单,即以图示的方式通过活动列表和时间刻度形象地表示出任何特定项目的活动顺序与持续时间.它直观地表明任务计划在什么时候进行,及实际进展与计划要求的对比.管理 ...
- jQuery 实现Bootstrap Chart 图表
很多时候我们制作报表的时候需要图表,如果你使用bootstrap开发你的网站,如果你需要使用图表,那么最简单的方法就是就是使用bootstrap 的chart.js来实现图表,下面介绍方法 1.引入c ...
- Winfrom Chart实现数据统计
简介 Chart图标根据实际使用情况,部分图表适用于多组数据的数据分析统计功能,例如柱状图:部分图表适用于单组数据的数据分析统计,例如饼状图. 主要属性 注意使用: Chart图表的如下属性:Lege ...
- [DT] 数据结构术语中英文对照
数据结构术语中英文对照 数据 Data 数据元素 Data element 数据项 Data item 数据结构 Data structure 逻辑结构 Logical structure 数据类型 ...
- 推荐一个学习Flex chart的好网站
推荐一个学习Flex chart的好网站 2013-03-04 14:16:56| 分类: Flex | 标签: |字号大中小 订阅 推荐一个学习Flex chart的好网站 最近在做一个 ...
- Chart.js docs
原文链接:http://www.bootcss.com/p/chart.js/docs/ 引入Chart.js文件 首先我们需要在页面中引入Chart.js文件.此工具库在全局命名空间中定义了Char ...
随机推荐
- AT1357 n^p mod m(洛谷)
题意翻译 求 n^p mod m 的值 输入格式 一行,为整数 n,m,p(注意顺序) 输出格式 一行,为 n^p mod m 的值 数据说明 对于100%的数据 1≤n,m≤10^91≤n,m≤10 ...
- 面试准备4——C++相关知识
指针和引用区别: (1)指针: 指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元: 引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已. 如: int a=1;in ...
- c# 扫描局域网IP列表的几种方法
很多软件都有获知局域网在线计算机IP的功能,但是在.net怎么实现呢,有好多方法, 下面我给大家介绍几种,供大家参考. 1.微软社区上介绍了使用Active Directory 来遍历局域网 利用Di ...
- Qt pri文件
pri文件就是一个简单的文件夹包含或者动态库调用路径等说明,在pro文件里include了pri文件,相当于把pri文件的内容直接复制到pro文件中
- Python项目开发之CMDB理解与分析
CMDB的由来--ITIL ITIL就是IT基础架构库(Information Technology Infrastructure Library, ITIL,信息技术基础架构库),由英国政府部门CC ...
- HTTP连接详解
- 从成员函数指针生成可调用对象:function<>、mem_fn()和bind()
我们知道,普通函数指针是一个可调用对象,但是成员函数指针不是可调用对象.因此,如果我们想在一个保存string的vector中找到第一个空string,不能这样写: vector<string& ...
- jQuery BlockUI Plugin Demo 5(Simple Modal Dialog Example)
Simple Modal Dialog Example This page demonstrates how to display a simple modal dialog. The button ...
- ES6-类(Class)
ES6躬行记(20)——类 ES6正式将类(Class)的概念在语法层面标准化,今后不必再用构造函数模拟类的行为.而ES6引入的类本质上只是个语法糖(即代码更为简洁.语义更为清晰),其大部分功能(例如 ...
- Azure Web应用相关设置
这里用来记录自己在工作中,在Azure Web应用中用到的配置 设置NodeJS版本 Azure Web应用默认的NodeJS版本是0.10.4,这个版本太低,不能满足实际的需要 参照下图修改,根据自 ...