UVa 11111 & POJ 3195 - Generalized Matrioshkas
2014-05-04 19:06
405 查看
传送门 UVa 11111 - Generalized Matrioshkas
一开始看了很久的题意, 看不懂. 后来参考了别人才知道是这么个意思..
跟括号匹配差不多, 一负一正就像一个 '(' 和一个')', 每个 ( 的下一级的总和不能超过这个 ( 的值.
所以题意就是给我们一坨数字, 负的数字只能和他的相反数匹配, 数字的后一级的和不能超过或者等于上一级.
参考了MistKafka的思路, 做了一点小的修改... 不过就是这一点小的修改让我调试了一个小时......
引用一下他的思路.
思路:用栈模拟,
遇到负数入栈; 正数则与栈顶匹配, 若匹配成功则消去栈顶 , 否则也入栈。栈的元素是结构体, 除了上面的括号自身的数值value外, 还有所有直接子括号的和sum。 在负数入栈前, 要把它的数值加到栈顶(如果empty就不用)的sum, 并判断, 判断完才能入栈。
详情见代码
一开始看了很久的题意, 看不懂. 后来参考了别人才知道是这么个意思..
跟括号匹配差不多, 一负一正就像一个 '(' 和一个')', 每个 ( 的下一级的总和不能超过这个 ( 的值.
所以题意就是给我们一坨数字, 负的数字只能和他的相反数匹配, 数字的后一级的和不能超过或者等于上一级.
参考了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); } else if (doll.empty() || doll.top().value != -wawa.value) //如果栈空或者没有匹配的, 错误. return false; else doll.pop(); //成功匹配, 出栈. return true; }
相关文章推荐
- UVA 196 & POJ 1420 Spreadsheet (DFS)
- hdu 4071& poj 3873 & zoj 3386 & uva 12197 Trick or Treat 三分法
- POJ 1903 & ZOJ 2469 & UVA 1326 Jurassic Remains (部分枚举)
- 2349 poj &&uva 10369 Arctic Network【最小生成树】
- poj 2249 && uva 530
- POJ 1003 & UVA 2294
- UVa 127 - "Accordian" Patience POJ 1214 链表题解
- Power of Cryptography(POJ-2109 && UVA-113)
- uva 709 &poj 1093 - Formatting Text (dp之小白告一段落)
- POJ 2528 & UVA 10587(线段树+离散+区间修改)
- POJ 2149 & ZOJ 2267&UVA 1337&UVALive 3192 Inherit the Spheres
- UVa 10125 & POJ 2549 - Sumsets
- HDU 2333 && POJ 3497 && UVA 12124 Assemble(二分最大化最小值)
- UVA-1388 && POJ-3154 墓地雕塑(数学)
- poj 1050 To the Max & uva 108
- UVA 755 && POJ 1002 (13.08.05)
- HDU 2333 & POJ 3497 & UVA 12124 Assemble (二分答案)
- POJ 1852 Ants || UVA 10881 - Piotr's Ants 经典的蚂蚁问题
- UVa 11054/HDU 1489/POJ 2940 Wine trading in Gergovia(贪心&双向队列)
- poj 1270&& uva 124 Following Orders(拓扑排序、DFS)