UVA 506 System Dependencies(模拟 烂题)

https://vjudge.net/problem/UVA-506

  题目是给出了五种指令,DEPEND、INSTALL、REMOVE、LIST、END,操作的格式及功能如下:

DEPEND item1 item2 (item3 ...) 安装item1需要先安装item2(、item3……)
INSTALL item1 安装item1,如果item1依赖其他组件,则先安装其依赖的其他组件
REMOVE item1 移除item1及其依赖的全部组件,如果组件被其他程序依赖,则不移除
LIST 输出当前已安装的所有组件
END 结束程序

  INSTALL指令中作为参数的组件的安装是显式安装,其所依赖的组件的安装不是显示安装。被显式安装的组件只能通过REMOVE指令显式删除,而移除中的组件如果当前被其他显式安装的组件直接或间接地依赖,则不能通过REMOVE移除。

  每当输入指令之后,先原样输出一遍指令,然后执行指令。安装组件时如果可以安装组件则需输出“Installing
组建名”。如果显式安装时组件已被安装则提示“组建名 is already
installed.”,隐式安装则无需提示。如果显式删除组件时组件未被安装则提示“组建名 is not
installed.”,如果组件被其他组件依赖则提示“组建名 is still needed.”,隐式卸载则无需提示。

  其实就是个用STL做的复杂模拟,纯属吃力不讨好的题目,并学不到什么算法思想,唯一的亮点就是为一个组件建立依赖和被依赖两个列表,其他的操作模拟即可。

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <string>
 4 #include <sstream>
 5 #include <set>
 6 #include <vector>
 7 #include <stack>
 8 #include <map>
 9 #include <queue>
10 #include <deque>
11 #include <cstdlib>
12 #include <cstdio>
13 #include <cstring>
14 #include <cmath>
15 #include <ctime>
16 #include <functional>
17 using namespace std;
18
19 int cnt = 0, status[maxn];
20 vector<int> depend[maxn], depend2[maxn];
21 vector<int> installed;
22 string name[maxn];
23
24 int get_id(const string & x)
25 {
26     for (int i = 0; i < cnt; i++)
27         if (name[i] == x)
28             return i;
29     name[cnt++] = x;
30     return cnt-1;
31 }
32
33 void instal(int item, bool top)
34 {
35     if (!status[item]){
36         for (size_t i = 0; i < depend[item].size(); i++)
37             instal(depend[item][i], false);
38         cout << "   Installing " << name[item] << endl;
39         status[item] = top ? 1 : 2;
40         installed.push_back(item);
41     }
42     else if(top)
43         cout << "   " << name[item] << " is already installed." << endl;
44 }
45
46 bool needed(int item)
47 {
48     for (size_t i = 0; i < depend2[item].size(); i++)
49         if (status[depend2[item][i]])
50             return true;
51     return false;
52 }
53
54 void Remove(int item, bool top)
55 {
56     if(top && status[item]==0)
57         cout << "   " << name[item] << " is not installed." << endl;
58     else if(top && needed(item))
59         cout << "   " << name[item] << " is still needed." << endl;
60     else if ((top || status[item] == 2) && !needed(item)){
61         status[item] = 0;
62         installed.erase(remove(installed.begin(), installed.end(), item), installed.end());
63         cout << "   Removing " << name[item] << endl;
64         for (size_t i = 0; i < depend[item].size(); i++)
65             Remove(depend[item][i], false);
66     }
67 }
68
69 int main()
70 {
72     ios::sync_with_stdio(false);
73     string line;
74     while (getline(cin, line), line != "END")
75     {
76         cout << line << endl;
77         stringstream ss(line);
78         if (line[0] == ‘L‘){
79             for (size_t i = 0; i != installed.size(); ++i)
80                 cout << "   " << name[installed[i]] << endl;
81         }
82         else{
83             string t1, t2, t3;
84             ss >> t1 >> t2;
85             if (t1[0] == ‘D‘){
86                 while (ss >> t3){
87                     depend[get_id(t2)].push_back(get_id(t3));
88                     depend2[get_id(t3)].push_back(get_id(t2));
89                 }
90             }
91             else if (t1[0] == ‘I‘)
92                 instal(get_id(t2), true);
93             else if (t1[0] == ‘R‘)
94                 Remove(get_id(t2), true);
95         }
96     }
97     cout << "END" << endl;
98     return 0;
99 }  
时间: 2024-12-06 08:06:41

UVA 506 System Dependencies(模拟 烂题)的相关文章

【STL+模拟】UVa 506 - System Dependencies

System Dependencies  Components of computer systems often have dependencies--other components that must be installed before they will function properly. These dependencies are frequently shared by multiple components. For example, both the TELNET cli

UVa 506 System Dependencies (细节问题)

题意:输入几种指令,让你进行模拟操作,指令如下: DEPEND item1 item2 (item3 ...) 安装item1需要先安装item2(.item3……) INSTALL item1 安装item1,如果item1依赖其他组件,则先安装其依赖的其他组件(如果已经安装就不用安装了) REMOVE item1 移除item1及其依赖的全部组件,如果组件被其他程序依赖,则不移除 LIST 输出当前已安装的所有组件 END 结束程序 析:看到这个题,虽然是放在数据结构这一章里,没觉得有什么数

uva 10562 undraw the trees(烂题) ——yhx

无需建树,递归即可. 为什么说是烂题呢? 1.pdf里的样例数据复制过来丢了空格,导致我调了很久都没有发现问题在哪. 2.如样例2所示,4个'-'下面却少一格. 3.空树,即只有'#'需要特殊处理. 1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<string> 5 using namespace std; 6 char map[210][210]; 7 int m

uva 10305 ordering tasks(超级烂题)——yhx

1 #include<cstdio> 2 #include<cstring> 3 #include<stack> 4 using namespace std; 5 int first[110],next[10010],to[10010],n; 6 bool b[110]; 7 stack<int> sta; 8 void dfs(int p) 9 { 10 int i,j,k,x,y,z; 11 for (i=first[p];i;i=next[i]) 12

POJ 3030. Nasty Hacks 模拟水题

Nasty Hacks Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13136   Accepted: 9077 Description You are the CEO of Nasty Hacks Inc., a company that creates small pieces of malicious software which teenagers may use to fool their friends.

HDOJ 2317. Nasty Hacks 模拟水题

Nasty Hacks Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3049    Accepted Submission(s): 2364 Problem Description You are the CEO of Nasty Hacks Inc., a company that creates small pieces of

Codeforces Round #259 (Div. 2) (简单模拟实现题)

题目链接:http://codeforces.com/problemset/problem/454/A A. Little Pony and Crystal Mine time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Twilight Sparkle once got a crystal from the Crystal Mine

[BestCoder Round #3] hdu 4907 Task schedule (模拟简单题)

Task schedule Problem Description 有一台机器,并且给你这台机器的工作表,工作表上有n个任务,机器在ti时间执行第i个任务,1秒即可完成1个任务. 有m个询问,每个询问有一个数字q,表示如果在q时间有一个工作表之外的任务请求,请计算何时这个任务才能被执行. 机器总是按照工作表执行,当机器空闲时立即执行工作表之外的任务请求. Input 输入的第一行包含一个整数T, 表示一共有T组测试数据. 对于每组测试数据: 第一行是两个数字n, m,表示工作表里面有n个任务,

Uva - 1513 Moive collection ( 模拟栈 + 树状数组基本操作 )

Uva - 1513 Moive collection ( 模拟栈 + 树状数组基本操作 ) 题意: 一个书架,原来所有的书都是按顺序摆好的,书的编号从1开始到n 操作: 取出一本书,统计在这本书之前有多少本书,统计完之后,将这本书放在书架的第一位. 如:  1 2 3 4 5取4   4 1 2 3 5 (取之前,有3本书在4前面,取完后,将4放在栈顶)取4   4 1 2 3 5 (取之前,有0本书在4前面,取完后,将4放在栈顶)取2   2 4 1 3 5 (取之前,有2本书在2前面,取完