题意:模拟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);
#endifwhile (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)。这应该是处理器的优化的结果吧。就是让处理器反复干一件事时它会预测下一步还是这个同样的计算,就会处理的特别快。也算是硬件因素吧?

转载于:https://www.cnblogs.com/xienaoban/p/6798073.html

[刷题]算法竞赛入门经典(第2版) 6-7/UVa804 - Petri Net Simulation相关推荐

  1. [刷题]算法竞赛入门经典(第2版) 4-1/UVa1589 - Xiangqi

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,0 ms) //UVa1589 #include<iostream> #incl ...

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

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

  3. [刷题]算法竞赛入门经典(第2版) 4-3/UVa220 - Othello

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,0 ms) //UVa 220 - Othello #include<iostream ...

  4. [刷题]算法竞赛入门经典(第2版) 5-2/UVa1594 - Ducci Sequence

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,20 ms) //UVa1594 - Ducci Sequence #include< ...

  5. [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-10/UVa1587:Box 代码: //UVa1587 - Box #include&l ...

  6. 算法竞赛入门经典(第二版)第三章习题

    声明:作者水平有限,只是会基础C语言的小菜,C++还未入门.作者仅根据算法竞赛入门经典(第二版)书上第三章习题所述题意而编写,并未严格按照原题的输入输出编写,代码仅经过个人测试(OJ网站太慢了).代码 ...

  7. 刘汝佳《算法竞赛入门经典(第二版)》习题(三)

    刘汝佳<算法竞赛入门经典(第二版)>第三章习题(一) 习题3-1 得分(ACM/ICPC Seoul 2005,UVa1585) 给出一个由O和X组成的串(长度为1~80),统计得分.每个 ...

  8. 刘汝佳《算法竞赛入门经典(第二版)》习题(六)

    刘汝佳<算法竞赛入门经典(第二版)>第四章习题(4-1~4-3) 习题4-1 象棋(Xiangai,ACM/ICPC Fuzhou 2011,UVa1589) 考虑一个象棋残局,其中红方有 ...

  9. 刘汝佳《算法竞赛入门经典(第二版)》习题(二)

    刘汝佳<算法竞赛入门经典(第二版)>第二章习题 目录 刘汝佳<算法竞赛入门经典(第二版)>第二章习题 习题2-1 水仙花数 习题2-2 韩信点兵 习题2-3 倒三角形 习题2- ...

最新文章

  1. java测试不成功_为什么我的Java布尔测试总是失败?
  2. php 自留地,重蔚自留地php基本语法-函数(附代码)
  3. 修改数据无法提交_MySQL数据库精讲:一文讲解MySQL事务隔离!
  4. waf可以查看post请求吗_WAFNinja:一款绕过WAF的渗透工具
  5. redis的安装和运行
  6. Cloud for Customer UI Designer里embedded component刷新的讨论
  7. oracle中调试存储过程,详解Oracle调试存储过程
  8. ux设计_声音建议:设计UX声音的快速指南
  9. 选择Java密码算法第1部分-散列
  10. 【UML】对象图Object diagram(转)
  11. 使用Json.Net处理json序列化和反序列化接口或继承类
  12. Python自学之路——装饰器的秘密
  13. 单片机定时报警C语言程序,单片机控制的简易定时报警器电路设计( - 控制/MCU - 电子发烧友网...
  14. Pygame安装方法(Windows10, Python-3.7.2)
  15. 基于AM437x的FPGA与ARM通信测试
  16. ESP32基础应用之使用两个ESP32通过阿里云物联网平台实现相互通信
  17. JAVA毕设项目猎头公司业务管理系统的设计与实现(java+VUE+Mybatis+Maven+Mysql)
  18. python命令行调试_Linux 黑乎乎的命令行下,如何调试 Python?
  19. Xcode升级以后构建ios出现 “unable to find utility PackageApplication, not a developer tool or in PATH”的报错解决
  20. android 仿qq相册功能,Android第四十九期 - 仿QQ空间上传功能+本地数据库存储

热门文章

  1. seminar by Moshe Vardi from Rice University
  2. DDMS连接bluestacks找不到设备
  3. IE 首页被改为www.1188.com的恢复办法
  4. MSPlus DatePicker WebControl FreeVersion 1.1.0906 发布啦!
  5. vi 不保存退出_vi或vim的快速操作技巧你知道吗?
  6. mysql 关闭线程池_线程池安全的关闭方式
  7. Vue学习之ref属性
  8. 机器学习和深度学习_算法测评 | 机器学习VS深度学习
  9. 微服务架构的优缺点_微服务架构DNS服务注册与发现实现原理
  10. java selenium firefox启动报错大调查