字典序

牛客——Rabbit的字符串

喜欢而已 提交于 2020-01-18 12:06:58
题目: 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 Rabbit得到了一个字符串,她的好朋友xxx可以给这个字符串施加 一次 魔法。 魔法可以选择字符串的任一位置,并将该位置后面的所有字符 水平 拼接到串首。 例如:对于字符串abcde,可以通过施加魔法得到cdeab。 如果xxx通过施加魔法将字符串的字典序变得 严格 比之前的小,那么他将拿走这一字符串。 Rabbit想知道自己的字符串会不会被xxx拿走。 输入描述: 第一行一个整数n,表示字符串的长度。接下来一行一个长度为n的只由小写字母组成的字符串。 输出描述: 如果Rabbit的字符串会被xxx拿走,输出“YES”。否则输出“NO”。(不输出引号) 示例1 输入 5 cdeab 输出 YES 说明 xxx可以把e之后的部分“ab”放到串首,得到abcde,字典序比cdeab小,故将拿走字符串。 示例2 输入 5 abcde 输出 NO 备注: 1≤n≤100000字典序的说明:https://en.wikipedia.org/wiki/Alphabetical_order 分析: 第一次遇到这种题目,用的是字符串的最小表示法,我会单独写一篇博客介绍这个方法,这里我只介绍本题的做法。 首先

第三次作业结对编程

房东的猫 提交于 2020-01-05 16:44:00
第三次作业结对编程 1.地址 GIT地址 https://github.com/qq319064057/WordCount GIT用户名 qq319064057 结对伙伴地址 https://www.cnblogs.com/tyx666/ 博客地址 https://www.cnblogs.com/319064057-lx/ 作业链接 https://www.cnblogs.com/319064057-lx/p/10660199.html 2.PSP表 PSP Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 20 20 Estimate 估计这个任务需要多少时间 20 20 Development 开发 600 710 Analysis 需求分析 (包括学习新技术) 50 40 Design Spec 生成设计文档 30 20 Design Review 设计复审 (和同事审核设计文档) 20 30 Coding Standard 代码规范 (为目前的开发制定合适的规范) 20 15 Design 具体设计 30 45 Coding 具体编码 360 300 Code Review 代码复审 60 50 Test 测试(自我测试,修改代码,提交修改) 30 30 Reporting 报告 90 70

字典序问题

微笑、不失礼 提交于 2020-01-01 01:46:10
字典序问题 Time limit: 1000MS Memory limit: 32768K Total Submit: 574 Accepted: 193 在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表A由26 个小 写英文字母组成A={a,b,…,z}。该字母表产生的升序字符串是指字符串中字母按照从左到右 出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现1次。例如,a,b,ab,bc,xyz 等字符串都是升序字符串。现在对字母表A 产生的所有长度不超过6 的升序字符串按照字 典序排列并编码如下。 1 2 … 26 27 28 … a b … z ab ac … 对于任意长度不超过6 的升序字符串,迅速计算出它在上述字典中的编码。 第一行是一个正整数k,表示接下来共有k行。 接下来的k行中,每行给出一个字符串。 输出共有k行,每行对应于一个字符串的编码。 Sample Input 2 a b Sample Output 1 2 代码 #include < stdio.h > #include < string .h > const int N = 26 ; const int LEN = 7 ; char str[LEN]; int c[N + 1 ][N + 1 ]; // c[i][j]记录组合数 // 使用杨辉三角计算n以内的c[i][j] c

noip模拟赛(10.4) 字典序(dictionary)

筅森魡賤 提交于 2020-01-01 01:44:33
【题目描述】 你需要构造一个1~n的排列,使得它满足m个条件,每个条件形如(ai,bi),表示ai必须在bi前面。在此基础上,你需要使它的字典序最小。 【输入数据】 第一行两个正整数n,m。接下来m行每行两个数ai,bi。 【输出数据】 输出一行n个整数表示答案。如果不存在这样的排列,输出-1。 【样例读入】 5 4 5 4 5 3 4 2 3 2 【样例输出】 1 5 3 4 2 【数据范围】 对于20%的数据,n,m<=10。 对于40%的数据,n,m<=200。 对于60%的数据,n,m<=1000。 对于100%的数据,n,m<=100000。 【题解】 按字典序的题目可以想到建图。要保证题目要求的先后顺序则在点ai和bi间建一条指向bi的有向边,并将无入度的点插入一个大根堆。每次弹出堆顶的元素,按弹出的先后顺序在ans数组中,并且更新该点的出度,将该点的出边全部删除,若删除产生了其他无入度点,则将其也插入堆中,如此往复。 #include<queue> #include<vector> #include<cstdio> #include<cstdlib> #include<algorithm> using namespace std; const int N=101111; inline int read() { int x=0,c=getchar(),f=1;

偏序+拓扑序+字典树

耗尽温柔 提交于 2020-01-01 01:38:37
题目描述 给定n个字符串,互不相等,你可以任意指定字符之间的大小关系(即重定义字典序),求有多少个串可能成为字典序最小的串,并输出它们 输入描述: 第一行一个数表示n之后n行每行一个字符串表示给定的字符串 输出描述: 第一行输出一个数x表示可行的字符串个数之后输出x行,每行输出一个可行的字符串输出的顺序和输入的顺序一致 示例1 输入 6 mcfx ak ioi wen l a 输出 5 mcfx ioi wen l a #include <bits/stdc++.h> #define INF 0x3f3f3f3f using namespace std; typedef struct node{ string s;int biao; friend bool operator <(node aa,node bb){ return aa.s.length()<bb.s.length(); } }node; string str[30005]; node dd[30005]; int cnt,root; typedef struct nop{ int a[26],ans; }nop; nop d[300005]; bool vvis[30005]; int newnode(){ cnt++;d[cnt].ans=0; for(int i=0;i<26;i++) d[cnt].a[i]=0

选靓号——拼多多笔试题(贪心+暴力)

徘徊边缘 提交于 2019-12-25 01:00:20
题意 链接: https://www.nowcoder.com/questionTerminal/005af31a10834b3688911463065ab47d 来源:牛客网 A 国的手机号码由且仅由 N 位十进制数字(0-9)组成。一个手机号码中有至少 K 位数字相同则被定义为靓号。A 国的手机号可以有前导零,比如 000123456 是一个合法的手机号。 小多想花钱将自己的手机号码修改为一个靓号。修改号码中的一个数字需要花费的金额为新数字与旧数字之间的差值。比如将 1 修改为 6 或 6 修改为 1 都需要花 5 块钱。 给出小多现在的手机号码,问将其修改成一个靓号,最少需要多少钱? 输入描述: 第一行包含2个整数 N、K,分别表示手机号码数字个数以及靓号至少有 K 个数字相同。第二行包含 N 个字符,每个字符都是一个数字('0'-'9'),数字之间没有任何其他空白符。表示小多的手机号码。数据范围:2 <= K <= N <= 10000 输出描述: 第一行包含一个整数,表示修改成一个靓号,最少需要的金额。第二行包含 N 个数字字符,表示最少花费修改的新手机号。若有多个靓号花费都最少,则输出字典序最小的靓号。 示例1 输入 6 5 787585 输出 4 777577 说明 花费为4的方案有两种:777577与777775,前者字典序更小。 思路 枚举每个数字(0~9

LeetCode 5273. 搜索推荐系统 Search Suggestions System

删除回忆录丶 提交于 2019-12-05 11:32:00
地址 https://leetcode-cn.com/problems/search-suggestions-system/ 题目描述 给你一个产品数组 products 和一个字符串 searchWord ,products 数组中每个产品都是一个字符串。 请你设计一个推荐系统,在依次输入单词 searchWord 的每一个字母后,推荐 products 数组中前缀与 searchWord 相同的最多三个产品。如果前缀相同的可推荐产品超过三个,请按字典序返回最小的三个。 请你以二维列表的形式,返回在输入 searchWord 每个字母后相应的推荐产品的列表。 样例 示例 1: 输入:products = ["mobile","mouse","moneypot","monitor","mousepad"], searchWord = "mouse" 输出:[ ["mobile","moneypot","monitor"], ["mobile","moneypot","monitor"], ["mouse","mousepad"], ["mouse","mousepad"], ["mouse","mousepad"] ] 解释:按字典序排序后的产品列表是 ["mobile","moneypot","monitor","mouse","mousepad"] 输入 m 和 mo

【洛谷 1385】密令

╄→尐↘猪︶ㄣ 提交于 2019-12-04 11:15:47
题目描述 给定一小写字母串s,每次操作你可以选择一个p(1<=p<|s|)执行下述修改中的任意一个: 将s[p]改为其字典序+1的字母,将s[p+1]改为其字典序-1的字母 或 2. 将s[p]改为其字典序-1的字母,将s[p+1]改为其字典序+1的字母 在经过任意多次操作后,串s能变化成多少种字符串? 修改过程中必须保证s是合法的小写字母串(即不能对字母‘a’进行字典 序-1的操作),答案对1000000007(10^9 + 7)取模。 输入格式 【输入格式】 第一行一个整数T,表示数据组数 接下来T行,每行一个小写字母串s。 输出格式 【输出格式】 输出T行,每行一个整数表示答案。 输入输出样例 输入 #1 复制 【样例输入】 3 aaaaaaaaa ya klmbfxzb 输出 #1 复制 【样例输出】 0 24 320092793 说明/提示 【数据范围】 对于30%的数据,T=1;|s|<=10 对于60%的数据,T<=10; 对于100%的数据,T<=10000;1<=|s|<=100 题解:由于不断变换的过程中,字典总和是不变的(你加上一个又减去一个变个p啊) 根据这个性质,推一下背包,就出来了惹。 #include<cstdio> #include<iostream> #include<cmath> #include<cstring> #include

CSP 2019.11.14 密码

☆樱花仙子☆ 提交于 2019-12-04 11:04:04
题目描述 哪里有压迫,哪里就有反抗。 moreD 的宠物在法庭的帮助下终于反抗了。作为一只聪明的宠物,他打算把 魔法使 moreD 的魔法书盗去,夺取 moreD 的魔法能力。但 moreD 怎么会让自己的 魔法书轻易地被盗取?moreD 在魔法书上设置了一个密码锁,密码锁上有一个问 题。 施以斯卧铺魔法吧,你有 M 次机会,如此将得完美密码。 然后是一串小写字母串。 moreD 的宠物斯卧铺魔法就是施法时的字符串其中相邻两位交换。 而 moreD 对于完美密码的定义自然是最小字典序了。 请帮助 moreD 的宠物,想出密码吧。 输入格式 第一行一个整数 M,表示操作次数。 第二行一串小写字母组成的字符串 S,如题目所示。 输出格式 输出完美密码 输入样例 3 dcba 输出样例 adcb 数据范围 对于 30%的数据|S|≤10 对于 60%的数据|S|≤3,000 对于 100%的数据 8≤|S|≤100,000,M≤(|S|-8)^2+2 后记 宠物最终战胜了 moreD,和自己的宠物快乐地生活着。 样例解释 先对第 3,4 两位施法,字符串变成 dcab,然后对第 2,3 两位施法,字符串 变成 dacb,最后对第 1,2 两位施法,字符串变成 adcb。 一眼望过去 很明显是个贪心啊,要求在一定的步骤内通过两两交换使得字典序最小. 解法 针对30%的数据: 暴力dfs。

P1385 密令

北城以北 提交于 2019-12-04 02:26:44
题目描述 给定一小写字母串s,每次操作你可以选择一个p(1<=p<|s|)执行下述修改中的任意一个: 将s[p]改为其字典序+1的字母,将s[p+1]改为其字典序-1的字母 或 2. 将s[p]改为其字典序-1的字母,将s[p+1]改为其字典序+1的字母 在经过任意多次操作后,串s能变化成多少种字符串? 修改过程中必须保证s是合法的小写字母串(即不能对字母‘a’进行字典 序-1的操作),答案对1000000007(10^9 + 7)取模。 输入格式 【输入格式】 第一行一个整数T,表示数据组数 接下来T行,每行一个小写字母串s。 输出格式 【输出格式】 输出T行,每行一个整数表示答案。 输入输出样例 输入 #1 复制 【样例输入】 3 aaaaaaaaa ya klmbfxzb 输出 #1 复制 【样例输出】 0 24 320092793 说明/提示 【数据范围】 对于30%的数据,T=1;|s|<=10 对于60%的数据,T<=10; 对于100%的数据,T<=10000;1<=|s|<=100 #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<queue> using namespace std; long long t,num