UVA230解题报告

2023-05-16

这个题耗了我六天时间,很打击我对算法的学习,不过,我终于解决了他。分析如下

仔细观察我们可以发现后面的操作与输出都是围绕标题(title)展开的,作者(author)所起的作用不过是排序而已。我们还注意到一个有趣的地方,即书籍上架时实现排序在上架,那么我们完全可以认为如果能确定一本书的状态的话,我们直接从前往后扫过去就可以了。状态的确定难不难呢?我觉得不难,由题意知每本书有三种状态(已上架、借出、归还但未上架),所以我们可以在定义个变量state记录这三种状态,分别用1、-1、0表示。状态与作者属性都封装在结构体book里,用map与书名形成映射。

书籍上架还有个重要的点要解决,那就是确定书籍的位置。我们可以用扫描法,从当前书籍往前扫,如果有书则输出在这本书后,没书也即j<0时输出该书是第一本书

附上AC代码Time 0ms

#include<cstdio>
#include<cstring>
#include<vector>
#include<map>
#include<sstream>
#include<algorithm>
#include<iostream>
using namespace std;

typedef struct book{
    int state;
    string author;
}book;

const int maxn=200;
char info[maxn];
vector<string> libs;
map<string,book> m;

bool cmp(string s1,string s2)
{
    if(m[s1].author!=m[s2].author) return m[s1].author<m[s2].author;
    else return s1<s2;
}

void add()
{
    stringstream ss(info);
    string title="",author="";
    string buf;
    ss>>buf; title+=buf;
    while(ss>>buf){
        if(buf=="by") break;
        title+=" "; title+=buf;
    }
    libs.push_back(title);
    ss>>buf; author+=buf;
    while(ss>>buf){
        author+=" "; author+=buf;
    }
    book b; b.state=1; b.author=author;
    m[title]=b;
}

void operate(){
    string order,title,buf;
    stringstream ss(info);
    ss>>order; if(ss>>buf) title+=buf;
    while(ss>>buf)
    {
        title+=" "; title+=buf;
    }
    switch(order[0])
    {
        case 'B':{
            m[title].state=-1;
            break;
        }
        case 'R' :{
            m[title].state=0;
            break;
        }
        case 'S':{
            for(int i=0;i<libs.size();i++)
            {
                title=libs[i];
                if(m[title].state!=0) continue;
                int j;
                for(j=i-1;j>=0;j--)
                    if(m[libs[j]].state==1) break;
                if(j<0) cout<<"Put "<<title<<" first"<<endl;
                else cout<<"Put "<<title<<" after "<<libs[j]<<endl;
                m[title].state=1;
            }
            printf("END\n");
            break;
        }
    }
}

int main()
{
    while(gets(info) && info[0]!='E' ) add();
    sort(libs.begin(),libs.end(),cmp);
    while(gets(info) && info[0]!='E') operate();
    return 0;
}



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UVA230解题报告 的相关文章

  • HDOJ 1058 Humble Numbers解题报告【DP】

    Humble Numbers 题目详见http acm hdu edu cn showproblem php pid 61 1058 开始拿到这个题目的时候还纠结了半天 xff0c 英语很差的话这个题是不可能AC的 而我就是其中之一 Hum
  • 楼教主男人必解八题之 Coins 解题报告

    楼教主男人必解八题之 Coins 解题报告 题目详见http acm hdu edu cn showproblem php pid 61 2844 这个题目和POJ1742是一个题目 xff0c 也是楼教主的男人八题之一 说的是给出N种硬币
  • [转载]最小矩形(rec1)的解题报告

    百度之星2009大赛的第二场有一道和此相关的题目 xff0c 如果看透这篇文章应该好写了 xff0c 不过可惜我事后才看到 xff0c 郁闷啊 xff01 xff01 还是要多看看书 原文 xff1a http www pmit com c
  • Leetcode Decode Ways 解题报告

    A message containing letters from A Z is being encoded to numbers using the following mapping 39 A 39 gt 1 39 B 39 gt 2
  • poj1287解题报告

    对于学过图和Prim算法的人来说 xff0c 此题是一道不折不扣的水题 xff0c 尤其是输入范围限定在了50之内 xff0c 所以即便我用了O xff08 n 3 xff09 的算法也只用了16MS就AC了 前期建图 xff0c 我用的是
  • zoj3961解题报告

    借今年浙江省赛的题练练手 首先 xff0c 由题意知 xff0c A与B发信息 xff0c 当A与B连续互相发信息m天时 xff0c 好感度point 43 1 输入有A向B发信息的天数与B向A发信息的起止天数 xff0c 具体格式看题 n
  • poj3617解题报告

    题意 xff1a 输入一个整数n xff0c 后面跟着n行大写字母 xff0c 现要求对这些字母进行排序 xff0c 要求字典序最小 xff0c 每80个字母一行且字母只能从两端任取一个 根据上面的信息我们不难想到若使字典序最小则只需从两端
  • UVA10881解题报告

    还是那句话 xff0c 解题先看题 由题意知有一根长度为L的木棒 xff0c 木棒上面有n只蚂蚁 xff0c 每只蚂蚁或朝左或朝右且以每秒1cm的速度移动 xff0c 吗 xff0c 蚂蚁相撞后掉头 xff0c 问T秒后每只蚂蚁的状态 xf
  • UVA1592解题报告

    这道题让我费了我好几天的时间 xff0c 差不多打掉了我对算法的全部信心 不过 xff0c 幸好 xff0c 经过几天的努力我终于AC了这道题 xff0c 解开了我的一个大心结 下面我将列出三份代码 xff0c 其中后两份是WA代码用来给同
  • UVA1594解题报告

    这么垃圾的代码竟然没有超时 xff0c 我真不知道是该欢喜还是愁 AC代码 Time 0 11s include lt cstdio gt include lt cmath gt using namespace std const int
  • uva12100解题报告

    水题留念 一个队列模拟进出操作 xff0c 一个优先队列保存优先级 xff0c 模拟过程输出结果 Time 0ms include lt cstdio gt include lt queue gt include lt cstring gt
  • UVA232解题报告

    注意一个地方 xff0c 编号是从左到右 从上往下增大的 xff0c 所以我们可以从这里做文章按照编号大小的顺序遍历输出 实际上 xff0c 因为给出的数据范围很小我们的求解速度还是很快的 xff0c 尤其是横向输出时还可以做点小手脚加快运
  • UVA227解题报告

    因为网格中存在空格所以用gets录入 xff0c 首先录入一行数据 xff0c 如果第一个字符为 39 Z 39 则break退出循环 其次是对指令的接受与处理 接受指令可以用getchar xff0c 遇到换行符跳过 处理也很简单 xff
  • HDU - 3018解题报告

    题意简述 给出n个节点 xff0c m条边 xff0c 问要想全部经过这m条边且每个边只经过一次至少需要多少条路径 分析 这个题实际上就是一笔画问题中的定理二 xff1a 如果连通无向图 G 有 2k 个奇顶点 xff0c 那么它可以用 k
  • UVA818解题报告

    span class hljs comment UVA 818 理解了题意和水题差不多 条件 xff1a 一些可能相同的无向边 要求 xff1a 构建一个满足如下三个要求的图 一 不能有环 二 连成一条直线 三 所有节点要连在一起 操作 x
  • 迷宫问题(2) 解题报告

    迷宫问题 问题描述 给定一个N M方格的迷宫 xff0c 迷宫里有T处障碍 xff0c 障碍处不可通过 给定起点坐标和终点坐标 xff0c 问每个方格最多经过1次 xff0c 有多少种从起点坐标到终点坐标的方案 在迷宫中移动有上下左右四种方
  • HDOJ 1058 Humble Numbers解题报告【DP】

    Humble Numbers 题目详见http acm hdu edu cn showproblem php pid 61 1058 开始拿到这个题目的时候还纠结了半天 xff0c 英语很差的话这个题是不可能AC的 而我就是其中之一 Hum
  • Print in Order 解题报告(C++)

    我们提供了一个类 xff1a public class Foo public void one print 34 one 34 public void two print 34 two 34 public void three print
  • Can you solve this equation?(二分)

    Problem Description Now given the equation 8 x 4 7 x 3 2 x 2 3 x 6 Y can you find its solution between 0 and 100 Now ple
  • 蓝桥杯 砝码称重 递归 解题报告

    5个砝码 用天平称重时 我们希望用尽可能少的砝码组合称出尽可能多的重量 如果只有5个砝码 重量分别是1 3 9 27 81 则它们可以组合称出1到121之间任意整数重量 砝码允许放在左右两个盘中 本题目要求编程实现 对用户给定的重量 给出砝

随机推荐

  • Python开发环境构建

    一 下载Python安装包 登录Python官网 xff08 https www python org xff09 找到Download xff0c 将鼠标移动到该位置会出现一个列表 xff0c 下载电脑对应系统的Python xff0c
  • 链表练习代码

    include lt stdio h gt include lt stdlib h gt typedef int element typedef int Status define OK 1 define ERROR 0 typedef s
  • 栈练习代码

    include lt stdio h gt include lt stdlib h gt const int maxn 61 1000 typedef struct Node int data int size int top Stack
  • 队列练习代码

    include lt stdio h gt include lt stdlib h gt include lt math h gt const int maxn 61 100000 int n typedef struct Node int
  • settingFragment设置属性的创建与响应

    android3 0之后设置属性有专门的方式显示 xff0c 基于PrefenceFragment xff0c 通过addPreferencesFromResource R xml preferences 加载界面 如图 xff1a 我的布
  • UVA1592解题报告

    这道题让我费了我好几天的时间 xff0c 差不多打掉了我对算法的全部信心 不过 xff0c 幸好 xff0c 经过几天的努力我终于AC了这道题 xff0c 解开了我的一个大心结 下面我将列出三份代码 xff0c 其中后两份是WA代码用来给同
  • UVA1594解题报告

    这么垃圾的代码竟然没有超时 xff0c 我真不知道是该欢喜还是愁 AC代码 Time 0 11s include lt cstdio gt include lt cmath gt using namespace std const int
  • Android studio乱码问题

    Android studio至少有两种乱码问题 xff0c 一种是中文乱码 xff0c 这也是最常见的乱码问题 出现这种问题的原因是编码方式不匹配 xff0c 所以只需要将编码方式改一改就行了 修改方式如下 如果画红圈的那个地方utf 8可
  • ArrayAdapter模板

    适配器模板 package cn edu bzu news adapter import android content Context import android view LayoutInflater import android v
  • Android自定义的类无法使用

    今天做老师布置的作业结果出现了一个错误 xff0c 那就是自定义的类无法使用 xff0c 如下 自定义的类竟然无法使用 xff0c 这是为什么呢 xff1f 经我仔细观察发现这是访问权限导致的问题 xff0c 在自定义类时鬼使神差的把类定义
  • Android studio错误修复快捷建

    用Android studio有的时候他报错却不给修复提示 xff0c 我们该怎么办呢 xff1f 当然是借助快捷键了 xff01 把光标移到出错的地方 xff0c 按下Alt 43 Enter就可以了 ps 摁一下就可以 xff0c 不要
  • Android老师作业七

    历经千辛万苦终于把它跑了出来 xff0c 截图如下 遇到问题如下 一 Android studio乱码 xff1a http blog csdn net dongchengrong article details 72594233 二 自定
  • The requested resource is not available

    具体问题截图 原因 xff1a 请求资源不合适 就拿我这个来说 xff0c 只要把jnp的扩展名改成jpg就好了
  • uva12100解题报告

    水题留念 一个队列模拟进出操作 xff0c 一个优先队列保存优先级 xff0c 模拟过程输出结果 Time 0ms include lt cstdio gt include lt queue gt include lt cstring gt
  • android studio删除jar包后报错

    我是把某个jar包删了又加的一个新的 xff0c 结果显示有个目录没找到 xff0c 如下 这是因为没有正确的删除jar包导致的 xff0c 正确的删除方式如下
  • 小米笔记本、小米游戏本重装原装出厂镜像教程-有百度盘的提取码

    转 xff1a 新的干货儿 小米笔记本 小米游戏本重装原装出厂镜像教程 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • UVA232解题报告

    注意一个地方 xff0c 编号是从左到右 从上往下增大的 xff0c 所以我们可以从这里做文章按照编号大小的顺序遍历输出 实际上 xff0c 因为给出的数据范围很小我们的求解速度还是很快的 xff0c 尤其是横向输出时还可以做点小手脚加快运
  • 较好的程序设计竞赛有哪些

    一 含金量最高 最出名的ACM ICPC xff1a https icpc baylor edu 二 百度的百度之星 xff1a http star baidu com 官微 xff1a http weibo com baiduastar
  • c++ string比较大小

    很简单 xff0c 像整型一样直接比较 例如 xff1a include lt iostream gt include lt string gt using namespace std int main string a 61 34 abc
  • UVA230解题报告

    这个题耗了我六天时间 xff0c 很打击我对算法的学习 xff0c 不过 xff0c 我终于解决了他 分析如下 仔细观察我们可以发现后面的操作与输出都是围绕标题 xff08 title xff09 展开的 xff0c 作者 xff08 au