题意:模拟Petri网的执行。虽然没听说过Petri网,但是题目描述的很清晰。


代码:(Accepted,0.210s)

//UVa804 - Petri Net Simulation
//Accepted 0.210s
//#define _XIENAOBAN_
#include<iostream>
#include<map>
using namespace std; struct {
map<int, int> ipt, opt;
} Trans[111]; int NP, NT, NF, Cnt, T(0);
int Token[111]; void IniAndInput() {
Cnt = 0;
for (int i(1);i <= NP;++i)
scanf("%d", Token + i);
scanf("%d", &NT);
for (int i(1);i <= NT;++i) {
Trans[i].ipt.clear();
Trans[i].opt.clear();
int n;
while (scanf("%d", &n) != EOF && n) {
if (n < 0) ++Trans[i].ipt[-n];
else ++Trans[i].opt[n];
}
}
scanf("%d", &NF);
} bool JudgeTrans(int i) {
for (auto& t : Trans[i].ipt)
if (Token[t.first] < t.second)
return false;
return true;
} bool TryTrans() {
for (int i(1);i <= NT;++i) {
if (!JudgeTrans(i)) continue;
for (auto& t : Trans[i].ipt)
Token[t.first] -= t.second;
for (auto& t : Trans[i].opt)
Token[t.first] += t.second;
return true;
}
return false;
} void Output() {
printf("Case %d: ", ++T);
if (Cnt < NF)
printf("dead after %d transitions\n", Cnt);
else printf("still live after %d transitions\n", NF);
printf("Places with tokens:");
for (int i(1);i <= NP;++i) if (Token[i])
printf(" %d (%d)", i, Token[i]);
printf("\n\n");
} void Debug() {
cerr << "\nToken:\n";
for (int i(1);i <= NP;++i) cerr << Token[i] << ' ';
cerr << "\nTrans:\n";
for (int i(1);i <= NT;++i) {
for (const auto& t : Trans[i].ipt) cerr << t.first << " - " << t.second << '\n';
for (const auto& t : Trans[i].opt) cerr << t.first << " + " << t.second << '\n';
}
} int main()
{
#ifdef _XIENAOBAN_
#define gets(T) gets_s(T, 129)
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif while (scanf("%d", &NP) != EOF && NP) {
IniAndInput();
//Debug();//
for (;Cnt < NF;++Cnt) {
if (!TryTrans()) break;
//Debug();//
}
Output();
}
return 0;
}

分析:其实就是无脑模拟。比前一题简单好多,有些意外。一遍通过,好久没一遍过了,好爽。题目描述的很清晰,看紫书的中文简述反而看不懂。这次尽量给不同部分分了个块,分到不同函数里去了,看着清晰点。210ms好像有点长,看网上别人的做法也基本类似,也不优化了。

说起来我一开始对每一个Case进行初始化Trans数组时,一开始选择的对整个数组的ipt、opt进行clear,用时190ms。后来改成只对要用的部分进行clear初始化,反而用时更长了(210ms)。这应该是处理器的优化的结果吧。就是让处理器反复干一件事时它会预测下一步还是这个同样的计算,就会处理的特别快。也算是硬件因素吧?

[刷题]算法竞赛入门经典(第2版) 6-7/UVa804 - Petri Net Simulation的更多相关文章

  1. [刷题]算法竞赛入门经典(第2版) 4-6/UVa508 - Morse Mismatches

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,10 ms) //UVa508 - Morse Mismatches #include< ...

  2. [刷题]算法竞赛入门经典(第2版) 5-15/UVa12333 - Revenge of Fibonacci

    题意:在前100000个Fibonacci(以下简称F)数字里,能否在这100000个F里找出以某些数字作为开头的F.要求找出下标最小的.没找到输出-1. 代码:(Accepted,0.250s) / ...

  3. [刷题]算法竞赛入门经典(第2版) 5-13/UVa822 - Queue and A

    题意:模拟客服MM,一共有N种话题,每个客服MM支持处理其中的i个(i < N),处理的话题还有优先级.为了简化流程方便出题,设每个话题都是每隔m分钟来咨询一次.现知道每个话题前来咨询的时间.间 ...

  4. [刷题]算法竞赛入门经典(第2版) 4-5/UVa1590 - IP Networks

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,0 ms) //UVa1590 - IP Networks #include<iost ...

  5. [刷题]算法竞赛入门经典(第2版) 6-6/UVa12166 - Equilibrium Mobile

    题意:二叉树代表使得平衡天平,修改最少值使之平衡. 代码:(Accepted,0.030s) //UVa12166 - Equilibrium Mobile //Accepted 0.030s //# ...

  6. [刷题]算法竞赛入门经典(第2版) 6-1/UVa673 6-2/UVa712 6-3/UVa536

    这三题比较简单,只放代码了. 题目:6-1 UVa673 - Parentheses Balance //UVa673 - Parentheses Balance //Accepted 0.000s ...

  7. [刷题]算法竞赛入门经典(第2版) 5-16/UVa212 - Use of Hospital Facilities

    题意:模拟患者做手术. 其条件为:医院有Nop个手术室.准备手术室要Mop分钟,另有Nre个恢复用的床.准备每张床要Mre分钟,早上Ts点整医院开张,从手术室手术完毕转移到回复床要Mtr分钟.现在医院 ...

  8. [刷题]算法竞赛入门经典(第2版) 5-11/UVa12504 - Updating a Dictionary

    题意:对比新老字典的区别:内容多了.少了还是修改了. 代码:(Accepted,0.000s) //UVa12504 - Updating a Dictionary //#define _XieNao ...

  9. [刷题]算法竞赛入门经典(第2版) 5-10/UVa1597 - Searching the Web

    题意:不难理解,照搬题意的解法. 代码:(Accepted,0.190s) //UVa1597 - Searching the Web //#define _XIENAOBAN_ #include&l ...

随机推荐

  1. oStrictHostKeyChecking=no 参数

    应用在脚本当中,避免使用域名链接服务器的时候,检查knows_hosts文件

  2. 在 WPF 中使用 Path 路径

    在 WPF 中总会修改 Button 的 Style,比如一个自定义的 Close 按钮.刚入门的可能会用一张 PNG 格式的图片来做这个按钮的 Icon,但这个是不优雅的.而且你要改的时候还得去操作 ...

  3. POST和GET的详细解释以及区别

    Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP ...

  4. Truncated incorrect DOUBLE value错误

    mysql报错:Truncated incorrect DOUBLE value sql的update语法错误eg: update Person set name = 'auhnayuiL' and ...

  5. 现代3D图形编程学习-你好,三角形(译)

    你好,三角形 传统的入门教程在介绍编程语言的时候,通常从"Hello,World!"的程序开始.这样的程序拥有最简单的能够直接输出"Hello, World!" ...

  6. 老李分享:pep8 python代码规范

    老李分享:pep8 python代码规范 什么是PEPPEP是 Python Enhancement Proposal 的缩写,翻译过来就是 Python增强建议书 . PEP8 译者:本文基于 20 ...

  7. Zookeeper的安装和初步使用

    1. Zookeeper集群角色 Zookeeper集群的角色:  Leader 和  follower  (Observer) zk集群最好配成奇数个节点 只要集群中有半数以上节点存活,集群就能提供 ...

  8. mysql 分析第一步

    分析mysql 慢的原因    思路 通过脚本观察 status -->看是否会出现周期性波动 一般由访高峰或缓存崩溃引起   加缓存更改 缓存失效策略 使失效时间分散 或夜间定时失效 --&g ...

  9. 用jQuery模拟淘宝购物车

    首先我们要实现的内容的需求有如下几点: 1.在购物车页面中,当选中"全选"复选框时,所有商品前的复选框被选中,否则所有商品的复选框取消选中. 2.当所有商品前的复选框选中时,&qu ...

  10. 源码阅读之mongoengine(0)

    最近工作上用到了mongodb,之前只是草草了解了一下.对于NoSQL的了解也不是太多.所以想趁机多学习一下. 工作的项目直接用了pymongo来操作直接操作mongodb.对于用惯了Djongo O ...