题意:有个编辑器,支持三种操作,摁下一个键盘上的字符,重复最后一个单词,删除最后一个字符.给N个字符串,必须先在编辑器内输入第一个字符,

问,输入完所有字符串最少需要摁下多少次键盘.

最多100个字符串,每个字符串长度最多为100.

可以观察到,为了使摁下键盘的次数最少,必须尽可能的利用当前输入的最后一个字符串.考虑到俩个操作,重复最后一个字符串,删除最后一个字符,那么,只要前缀是匹配的,就可以通过这

俩个操作来减少摁下键盘的次数.所以每次都找前缀匹配最大的字符串即可.

老罗一定做过这个题,而且抄袭了这个创意,用语音控制输入.

#include <string>
#include<iostream>
#include<map>
#include<memory.h>
#include<vector>
#include<algorithm>
#include<queue>
#include<vector>
#include<stack>
#include<math.h>
#include<iomanip>
#include<bitset>
#include"math.h"
namespace cc
{
using std::cout;
using std::endl;
using std::cin;
using std::map;
using std::vector;
using std::string;
using std::sort;
using std::priority_queue;
using std::greater;
using std::vector;
using std::swap;
using std::stack;
using std::bitset; constexpr int N = ; int cases;
char strs[N][N];
char cur[N]; int total = ;
int n; void solve()
{
cin >> cases;
while (cases--)
{
cin >> n;
total = ;
memset(strs,,sizeof(strs));
for (int i=;i<n;i++)
{
scanf("%s",strs[i]);
}
total += strlen(strs[]);
memcpy(cur,strs[],sizeof(strs[]));
int vis[N] = {};
int seqs[N] = {};
int seq = ;
seqs[seq++] = ;
vis[] = ;
while (true)
{
int nextIndex = -;
int min = -;
int curL = strlen(cur);
for (int i=;i<n;i++)
{
if (vis[i] != )
continue;
int curMin = ;
for (int j=;j< curL;j++)
{
if (strs[i][j] == '\0'|| strs[i][j]!= cur[j])
break;
++curMin;
}
if (min < curMin)
{
min = curMin;
nextIndex = i;
}
}
if (nextIndex == -)
break;
vis[nextIndex] = ;
seqs[seq++] = nextIndex;
total += strlen(strs[nextIndex])-min;
memcpy(cur,strs[nextIndex],N);
}
cout << total << endl;
for (int i = ;i < n;i++)
{
cout << strs[seqs[i]] << endl;
} }
} }; int main()
{ #ifndef ONLINE_JUDGE
freopen("d://1.text", "r", stdin);
#endif // !ONLINE_JUDGE
cc::solve(); return ;
}

uva-10602-贪心的更多相关文章

  1. 01_传说中的车(Fabled Rooks UVa 11134 贪心问题)

    问题来源:刘汝佳<算法竞赛入门经典--训练指南> P81: 问题描述:你的任务是在n*n(1<=n<=5000)的棋盘上放n辆车,使得任意两辆车不相互攻击,且第i辆车在一个给定 ...

  2. UVA 11389(贪心问题)

    UVA 11389 Time Limit:1000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Description II  ...

  3. uva 10154 贪心+dp

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  4. UVa 11389 (贪心) The Bus Driver Problem

    题意: 有司机,下午路线,晚上路线各n个.给每个司机恰好分配一个下午路线和晚上路线. 给出行驶每条路线的时间,如果司机开车时间超过d,则要付加班费d×r. 问如何分配路线才能使加班费最少. 分析: 感 ...

  5. UVa 1467 (贪心+暴力) Installations

    题意: 一共有n项服务,每项服务有安装的时间s和截止时间d.对于每项任务,如果有一项超出截止时间,惩罚值为所超出时间的长度.问如何安装才能使惩罚值最大的两个任务的惩罚值之和最小. 分析: 如果是求总惩 ...

  6. uva 10602 Editor Nottoobad(排序)

    题目连接:10602 Editor Nottoobad 题目大意:要输入n个单词,现在有三种操作, 1.输入一个字符,需要按下一次按键.  2.通过声控删除一个字符.3.通过声控复制一遍上面的单词.现 ...

  7. Party Games UVA - 1610 贪心

    题目:题目链接 思路:排序后处理到第一个不同的字符,贪心一下就可以了 AC代码: #include <iostream> #include <cstdio> #include ...

  8. UVa 1149 (贪心) Bin Packing

    首先对物品按重量从小到大排序排序. 因为每个背包最多装两个物品,所以直觉上是最轻的和最重的放一起最节省空间. 考虑最轻的物品i和最重的物品j,如果ij可以放在一个包里那就放在一起. 否则的话,j只能自 ...

  9. UVA 10037 贪心算法

    题目链接:http://acm.hust.edu.cn/vjudge/contest/122829#problem/A 题目大意:N个人夜里过河,总共只有一盏灯,每次最多过两个人,然后需要有人将灯送回 ...

  10. UVa 10602 - Editor Nottoobad

    题目大意:有一个编辑器,它有两种命令,“重复上一个单词” 和 “删除前一个字母”,给出一系列字符串,求最少的敲击键盘的次数. 题目中强调第一个敲的单词必须是给的第一个单词,于是就考虑按照单词与第一个单 ...

随机推荐

  1. Zabbix4.0报警配置-企业微信报警

    一:前期准备 1.1:企业号注册 https://qy.weixin.qq.com/  微信调用接口说明 http://qydev.weixin.qq.com/wiki/index.php?title ...

  2. Hashmap的学习整理

    这是我大致了解Hashmap的第一个博客:https://www.cnblogs.com/chengxiao/p/6059914.html 我将摘录里面的重点: 哈希表的主干就是数组 存储位置 = f ...

  3. 2019-04-11-day030-网络编程并发

    内容回顾 黏包 tcp协议为了保证数据的可靠传输和传输效率 合包机制 : 连续多条短数据会合并成一条 拆包机制 : 一个过大的数据会在发出之前被拆成几个小包 tcp的黏包发生在两端: 发送端 : 合包 ...

  4. 12--Python入门--文件读写--TXT文件

    在进行数据分析之前,可能需要读写自己的数据文件.或者在完成数据分析之后,想把结果输出到外部的文件在Python中,利用pandas模块中的几个函数,可以轻松实现这些功能,利用pandas读取文件之后数 ...

  5. 3.5 unittest生成测试报告HTMLTestRunner

    3.5 unittest生成测试报告HTMLTestRunner 前言批量执行完用例后,生成的测试报告是文本形式的,不够直观,为了更好的展示测试报告,最好是生成HTML格式的.unittest里面是不 ...

  6. zabbix3.4安转

    其实很简单  在官网上有安装文档,我只不过是将官网上的拿了下来 安装apache和php 数据库mariadb(我的系统是centos7的所以安装mariadb) 开始zabbix的安装 本次实验 系 ...

  7. SSM 与三层架构的关系的简单理解

    NOTE 1:Spring MVC 编写在表示层,代替了servlet.主要作用就是接收用户的请求,完成响应或转发; NOTE 2:Mybatis 编写在dao层,代替了原来的JDBC,就要就是用来跟 ...

  8. #20175120彭宇辰 java第四周总结

    教材学习内容总结 -第五章 子类与继承 子类的定义-class 子类名 extends 父类名ps:-任何类都是object的子类-每个类有且仅有一个父类,多个或0个子类 同一包里的继承性-除了pri ...

  9. Arcmap查找孤路

    本文将介绍如何查出孤路——如下图红色框中的路: 方法一:使用拓扑检查 1. 使用merge,将所有道路合并到一个图层.注意,不能先分图层进行拓扑检查,因为本不是孤路的数据可能会被挑出来. 2. 对合并 ...

  10. Js高级 事件冒泡

    什么叫事件冒泡 当给父子元素的同一事件绑定方法时,触发了子元素身上的事件,执行完毕之后,也会触发父级元素的相同事件,这种传播机制叫事件冒泡. 取消事件冒泡 Event对象有个属性叫cancelBubb ...