UVa 11111 & POJ 3195 - Generalized Matrioshkas
来源:互联网 发布:windows 自动点击 编程 编辑:程序博客网 时间:2024/06/07 12:14
传送门 UVa 11111 - Generalized Matrioshkas
一开始看了很久的题意, 看不懂. 后来参考了别人才知道是这么个意思..
跟括号匹配差不多, 一负一正就像一个 '(' 和一个')', 每个 ( 的下一级的总和不能超过这个 ( 的值.
所以题意就是给我们一坨数字, 负的数字只能和他的相反数匹配, 数字的后一级的和不能超过或者等于上一级.
参考了MistKafka的思路, 做了一点小的修改... 不过就是这一点小的修改让我调试了一个小时......
引用一下他的思路.
思路:用栈模拟, 遇到负数入栈; 正数则与栈顶匹配, 若匹配成功则消去栈顶 , 否则也入栈。栈的元素是结构体, 除了上面的括号自身的数值value外, 还有所有直接子括号的和sum。 在负数入栈前, 要把它的数值加到栈顶(如果empty就不用)的sum, 并判断, 判断完才能入栈。
详情见代码
#include <cstdio>#include <stack>using namespace std;struct dolls{ int sumBig; int value; dolls(int x) { sumBig = 0; value = x; }};stack<dolls> doll;int big;char ch;bool Judge();int main(){//freopen("input.txt", "r", stdin); bool flag; while (~scanf("%d%c", &big, &ch)) { flag = Judge(); if (flag && ch == '\n' && doll.empty())//如果是最后一个数字并且返回正确并且栈空 printf(":-) Matrioshka!\n"); else if (flag == false || ch == '\n' && !doll.empty())//如果输入仅有一个数{ printf(":-( Try again.\n");//如果其中有一次返回错误, 那么这个输入就是错的, 这时候要处理剩下的输入.while (!doll.empty())//每次错误都要清空栈, 因为要读取新的输入.doll.pop();if (ch == '\n')//当输入就一个数时, 这时候的ch就是'\n', 不能再消去了, 不然就得不到EOF或者下一行的正确数据, 这里搞了很久continue;while (getchar() != '\n');//ch不是'\n', 消去,直到当前行的最后一个.} } return 0;}bool Judge(){ dolls wawa(big); if (big < 0) if (doll.empty()) //如果栈空, 直接进栈. doll.push(wawa); else {doll.top().sumBig += wawa.value;if (doll.top().value >= doll.top().sumBig)return false;doll.push(wawa); } elseif (doll.empty() || doll.top().value != -wawa.value)//如果栈空或者没有匹配的, 错误.return false;elsedoll.pop();//成功匹配, 出栈.return true;}
0 0
- UVa 11111 & POJ 3195 - Generalized Matrioshkas
- uva 11111 - Generalized Matrioshkas
- UVa 11111 Generalized Matrioshkas
- uva 11111 - Generalized Matrioshkas
- uva 11111 - Generalized Matrioshkas
- UVa 11111 - Generalized Matrioshkas
- uva 11111 - Generalized Matrioshkas
- UVa 11111 - Generalized Matrioshkas
- UVA-11111-Generalized Matrioshkas
- uva 11111 - Generalized Matrioshkas
- uva-11111 Generalized Matrioshkas
- UVa 11111 - Generalized Matrioshkas
- UVA 11111 Generalized Matrioshkas
- uva 11111 Generalized Matrioshkas
- Generalized Matrioshkas UVA 11111
- UVa:11111 Generalized Matrioshkas
- UVa 11111 Generalized Matrioshkas
- UVA 11111 - Generalized Matrioshkas
- maven 导出依赖包
- 软件设计师复习笔记--多媒体
- NSIndexSet
- 敏捷开发
- 使用MD5SUM检查文件
- UVa 11111 & POJ 3195 - Generalized Matrioshkas
- 由12306.cn谈谈网站性能技术
- MOOC程序设计期中考试1.6
- onCreateDialog方法及示例
- mysql 常用命令
- 黑马程序员_IO流(二)——BufferReader、BufferWriter
- (转载)C++内存地址分配
- Evaluate Reverse Polish Notation
- 多线程