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 }

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

  1. 【STL+模拟】UVa 506 - System Dependencies

    System Dependencies  Components of computer systems often have dependencies--other components that m ...

  2. Uva - 506 - System Dependencies

    模拟题,注意显示安装和隐式安装,显示安装的必须显示显示删除.把名字转化为整数维护.其他注意都注释了.输入稍微多一下,题目不是很麻烦. AC代码: #include <iostream> # ...

  3. UVa 506 System Dependencies (细节问题)

    题意:输入几种指令,让你进行模拟操作,指令如下: DEPEND item1 item2 (item3 ...) 安装item1需要先安装item2(.item3……) INSTALL item1 安装 ...

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

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABB4AAAM9CAYAAAA7ObAlAAAgAElEQVR4nOyd25GsupKGywVswAV8wA ...

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

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABHIAAAHDCAYAAABI5T2bAAAgAElEQVR4nOydPY7svLW1awQGNABHCm

  6. UVA.10881 Piotr's Ants (思维题)

    UVA.10881 Piotr's Ants (思维题) 题意分析 有一根长度为L cm的木棍,上有n只蚂蚁,蚂蚁要么向左爬,要么向右,速度均为1cm/s,若2只蚂蚁相撞,则蚂蚁同时调头.求解第T秒时 ...

  7. HDOJ 2317. Nasty Hacks 模拟水题

    Nasty Hacks Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

  8. UVA.11300 Spreading the Wealth (思维题 中位数模型)

    UVA.11300 Spreading the Wealth (思维题) 题意分析 现给出n个人,每个人手中有a[i]个数的金币,每个人能给其左右相邻的人金币,现在要求你安排传递金币的方案,使得每个人 ...

  9. UVA.12096 The SetStack Computer ( 好题 栈 STL混合应用)

    UVA.12096 The SetStack Computer ( 好题 栈 STL混合应用) 题意分析 绝对的好题. 先说做完此题的收获: 1.对数据结构又有了宏观的上的认识; 2.熟悉了常用STL ...

随机推荐

  1. 6.算法竞赛中的常用JAVA API :Math类(转载)

    6.算法竞赛中的常用JAVA API :Math类 求最值 最小值 Math.min(int a, int b) Math.min(float a, float b) Math.min(double ...

  2. 原来一条select语句在MySQL是这样执行的《死磕MySQL系列 一》

    前言 看到蒋老师的第一篇文章后就收货颇丰,真是句句戳中痛点. 令我记忆最深的就是为什么知道了一个个技术点,却还是用不好 ?不管是蒋老师所说的Redis还是本系列要展开学习的MySQL. 这是一个值得思 ...

  3. SQL 练习14

    查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩 SELECT Student.SId,Student.Sname,t.不及格课程数,t.平均成绩 from Student, (SELECT ...

  4. com.github.ulisesbocchio:jasypt-spring-boot-starter:2.0.0引用了sping cloud Finchley.M8版本,一直报错说不能从阿里云下载

    解决方法: 1.找到idea或者eclipase中maven插件引向得settings.xml文件 2.修改文件中<mirror/>标签(配置仓库镜像用得)中<mirrorOf/&g ...

  5. uwp 之多媒体开发

    xml code ----------------------------------------------------- <Page x:Class="MyApp.MainPage ...

  6. Mybatis的分页工具

    配置拦截器插件 特别注意,新版拦截器是 com.github.pagehelper.PageInterceptor. com.github.pagehelper.PageHelper 现在是一个特殊的 ...

  7. (2)hadoop之-----配置免密码登录

    ssh-keygen -t rsa 然后一路回车 在家目录下会生成 .ssh 目录           ls -la   查看 进入   .ssh            cd .ssh cp ~/.s ...

  8. 2020年秋游戏开发-flappy bird

    此作业要求参考https://edu.cnblogs.com/campus/nenu/2020Fall/homework/11577 GitHub地址为https://github.com/15011 ...

  9. 解决Openstack Dashboard无法获取实例故障

    在部署配置完openstack基础服务以及dashboard后.登录页面发现很多功能都不正常,无法获取实例,也无法获取镜像. 查看日志 [root@openstack-controller-dev ~ ...

  10. freeswitch新增模块

    概述 freeswitch的架构由稳定的核心模块和大量的外围插件式模块组成.核心模块保持稳定,外围模块可以动态的加载/卸载,非常灵活方便. 外围模块通过核心提供的 Public API与核心进行通信, ...