UVA804-Petri Net Simulation(模拟)
Problem UVA804-Petri Net Simulation
Accept:251 Submit:1975
Time Limit: 3000 mSec
Problem Description
Input
Each Petri net description will first contain an integer NP (0 < NP < 100) followed by NP integers specifying the number of tokens initially in each of the places numbered 1,2,...,NP. Next there will appear an integer NT (0 < NT < 100) specifying the number of transitions. Then, for each transition (in increasing numerical order 1,2,...,NT) there will appear a list of integers terminated by zero. The negative numbers in the list will represent the input places, so the number −n indicates there is an input place at n. The positive numbers in the list will indicate the output places, so the number p indicates an output place at p. There will be at least one input place and at least one output place for each transition. Finally, after the description of all NT transitions, there will appear an integer indicating the maximum number of firings you are to simulate, NF. The input will contain one or more Petri net descriptions followed by a zero.
Output
For each Petri net description in the input display three lines of output. On the first line indicate the number of the input case (numbered sequentially starting with 1) and whether or not NF transitions were able to fire. If so, indicate the net is still live after NF firings. Otherwise indicate the net is dead, and the number of firings which were completed. In either case, on the second line give the identities of the places which contain one or more tokens after the simulation, and the number of tokens each such place contains. This list should be in ascending order. The third line of output for each set should be blank. The input data will be selected to guarantee the uniqueness of the correct output displays.
Sample Input
Sample Ouput
Case 1: still live after 100 transitions
Places with tokens: 1 (1)
Case 2: dead after 9 transitions
Places with tokens: 2 (1)
题解:这个题就是个模拟,题意稍有一些难懂(英文比紫书的中文好懂......)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <vector>
using namespace std; const int maxn = +; struct Place{
int token;
}place[maxn]; struct Point{
int pos,sum;
Point(int pos = ,int sum = ) :
pos(pos),sum(sum) {}
}; struct Tra{
vector<Point> input,output;
}Tra[maxn]; int n,m,iCase = ;
int in[maxn],out[maxn]; bool solve(){
for(int i = ;i <= m;i++){
bool ok = true;
for(int j = ;j < (int)Tra[i].input.size();j++){
int pos = Tra[i].input[j].pos;
int sum = Tra[i].input[j].sum;
if(place[pos].token < sum){
ok = false;
break;
}
}
if(ok){
for(int k = ;k < (int)Tra[i].input.size();k++){
int pos = Tra[i].input[k].pos;
int sum = Tra[i].input[k].sum;
place[pos].token -= sum;
}
for(int k = ;k < (int)Tra[i].output.size();k++){
int pos = Tra[i].output[k].pos;
int sum = Tra[i].output[k].sum;
place[pos].token += sum;
}
return true;
}
}
return false;
} int main()
{
//freopen("input.txt","r",stdin);
while(~scanf("%d",&n) && n){
for(int i = ;i <= n;i++){
scanf("%d",&place[i].token);
}
scanf("%d",&m);
for(int i = ;i <= m;i++){
Tra[i].input.clear();
Tra[i].output.clear();
}
int x;
for(int i = ;i <= m;i++){
memset(in,,sizeof(in));
memset(out,,sizeof(out));
while(scanf("%d",&x) && x){
if(x < ) in[-x]++;
else out[x]++;
}
for(int t = ;t <= n;t++){
if(in[t]) Tra[i].input.push_back(Point(t,in[t]));
if(out[t]) Tra[i].output.push_back(Point(t,out[t]));
}
}
int round;
scanf("%d",&round);
int tt;
for(tt = ;tt <= round;tt++){
if(!solve()) break;
}
printf("Case %d: ",iCase++);
if(tt > round) printf("still live after %d transitions\n",round);
else printf("dead after %d transitions\n",tt-);
printf("Places with tokens:");
for(int i = ;i <= n;i++){
if(place[i].token){
printf(" %d (%d)",i,place[i].token);
}
}
printf("\n\n");
}
return ;
}
UVA804-Petri Net Simulation(模拟)的更多相关文章
- [刷题]算法竞赛入门经典(第2版) 6-7/UVa804 - Petri Net Simulation
题意:模拟Petri网的执行.虽然没听说过Petri网,但是题目描述的很清晰. 代码:(Accepted,0.210s) //UVa804 - Petri Net Simulation //Accep ...
- Uva - 804 - Petri Net Simulation
Input: petri.in A Petri net is a computational model used to illustrate concurrent activity. Each Pe ...
- 【习题 6-7 UVA - 804】Petri Net Simulation
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 模拟就好 [代码] /* 1.Shoud it use long long ? 2.Have you ever test sever ...
- Leetcode874.Walking Robot Simulation模拟行走的机器人
机器人在一个无限大小的网格上行走,从点 (0, 0) 处开始出发,面向北方.该机器人可以接收以下三种类型的命令: -2:向左转 90 度 -1:向右转 90 度 1 <= x <= 9:向 ...
- LightOJ Beginners Problems 部分题解
相关代码请戳 https://coding.net/u/tiny656/p/LightOJ/git 1006 Hex-a-bonacci. 用数组模拟记录结果,注意取模 1008 Fibsieve's ...
- 蒙特卡洛树搜索算法(UCT): 一个程序猿进化的故事
前言: 本文是根据的文章Introduction to Monte Carlo Tree Search by Jeff Bradberry所写. Jeff Bradberry还提供了一整套的例子,用p ...
- NeHe OpenGL教程 第三十九课:物理模拟
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- swat主流域文件(file.cio)参数详解——引自http://blog.sciencenet.cn/blog-922140-710636.html
% file.clo,即主流域文件用于文件管理,包括与模型选项.气候输入.数据库和输出控制相关的信息. Master Watershed File: file.cio Project Descript ...
- QM5_Didstribution
Basic Concepts Probability distribution Discrete distribution (离散分布) The distribution of the discret ...
- Cisco Packet Tracer中通过集线器组网
Cisco Packet Tracer中可以通过集线器将多台电脑完成通信. Cisco Packet Tracer 6.2.0 一.添加三台电脑设备 1.按照下图1.2步骤操作,2步骤执行三次,拖拽P ...
随机推荐
- JavaScript模拟自由落体
1.效果图 2.实现分析 利用Canvas画圆球.地面: 1.下落过程 物理知识回顾,物体下落过程(不计损耗)由重力势能转换成动能 重力势能 Ep = mgh 动能 Ek = (1/2)mv^2 速 ...
- Oracle字符串函数
Oracle字符串函数 平常我们用Oracle主要有两种字符串类型1.char始终为固定的长度,如果设置了长度小于char列的值,则Oracle会自动用空格填充的.当比较char时,Oracle用空格 ...
- JS 上传图片 + 预览功能(二)
简单粗暴 直接进入主题: Html <script src="../js/jquery-2.1.1.min.js"></script> <style& ...
- ECharts图表实战经验1:如何设置图表同序列不同数据点的独立颜色值
最近有不少朋友在追问这样一个问题:我单序列的柱状图,我想让每一个根柱子的颜色都不一样,应该如何做? 针对这个问题,其实我只想说你压根没有认真看完或者查找ECharts官方的示例,官方能够找到的示例有: ...
- Markdown字体大小与颜色
Markdown是一种可以使用普通文本编辑器编写的标记语言,通过类似HTML的标记语法,它可以使普通文本内容具有一定的格式.但是它本身是不支持修改字体.字号与颜色等功能的! CSDN-markdo ...
- 【JVM】6、聊聊JVM常用参数设置
整体考虑堆大小 -Xms3550m, 初始化堆大小.通常情况和-Xmx大小设置一样,避免虚拟机频繁自动计算后调整堆大小. -Xmx3550m,最大堆大小. 考虑分代设置堆大小 首先通过jstat等工具 ...
- 【github&&git】2、github入门到上传本地项目
[在原文章的基础上,修改了描述的不够详细的地方,对内容进行了扩充,整合了网上的一些资料] [内容主要来自http://www.cnblogs.com/specter45/p/github.html#g ...
- 通过Eureka自带REST API强行剔除失效服务
1.确定需要强行剔除的服务 2.执行接口 方便复制: http://{ip}:{port}/eureka/apps/CONFIG-SERVER-TEST/tom:config-server-test: ...
- 解析<button>和<input type="button"> 的区别
一.定义和用法 <button> 标签定义的是一个按钮. 在 button 元素内部,可以放置文本或图像.这是<button>与使用 input 元素创建的按钮的不同之处. 二 ...
- CSS效果:CSS select样式优化 含jquery代码
CSS 下拉选择菜单基本的CSS样式不怎么好看,通过一些简单的样式优化,可以得到如下图这样的: html结构如下: <div class="sel_wrap"> < ...