Wannafly 每日一题 2016-12-26 KAOS 字典树
题目链接:
http://www.spoj.com/problems/KAOS/
题意:
给定n个字符串,统计字符串(s1, s2)的对数,使得s1的字典序比s2的字典序要大,s1反一反(abc==>cba,记为s1’)比s2’的字典序要小。
题解:
按字符串的字典序排序,从小到大枚举,假设现在考虑到了字符串s1,那么我们已经处理过了所有字典序小于s1的字符串s2,我们关心的是这些字符串中满足s1’小于s2’的s2的数目。Ok,这个task可以完美地用trie树解决。
代码:
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 #define MS(a) memset(a,0,sizeof(a)) 5 #define MP make_pair 6 #define PB push_back 7 const int INF = 0x3f3f3f3f; 8 const ll INFLL = 0x3f3f3f3f3f3f3f3fLL; 9 inline ll read(){ 10 ll x=0,f=1;char ch=getchar(); 11 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} 12 while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} 13 return x*f; 14 } 15 // 16 const int maxn = 1e6+10; 17 18 string str[maxn]; 19 int a[maxn][30],f[maxn]; 20 int cnt; 21 22 void insert(string s){ 23 int len = s.size(); 24 int now = 0; 25 for(int i=len-1; i>=0; i--){ 26 if(!a[now][s[i]-'a']) 27 a[now][s[i]-'a'] = ++cnt; 28 now = a[now][s[i]-'a']; // 爬到下一层 29 ++f[now]; 30 } 31 } 32 33 ll calc(string s){ 34 int len = s.size(),now=0; 35 ll ans = 0; 36 for(int i=len-1; i>=0; i--){ 37 for(int j=s[i]-'a'+1; j<26; j++) 38 ans += f[a[now][j]]; // 每一层的贡献就是比当前串字典序大的字符串 39 now = a[now][s[i]-'a']; 40 } 41 42 for(int i=0; i<26; i++) 43 ans += f[a[now][i]]; 44 return ans; 45 } 46 47 int main(){ 48 int n; 49 cin >> n; 50 for(int i=0; i<n; i++) 51 cin >> str[i]; 52 sort(str,str+n); 53 54 ll ans = 0; 55 for(int i=0; i<n; i++){ 56 insert(str[i]); 57 ans += calc(str[i]); 58 } 59 60 cout << ans << endl; 61 62 return 0; 63 }
转载于:https://www.cnblogs.com/yxg123123/p/6827582.html
Wannafly 每日一题 2016-12-26 KAOS 字典树相关推荐
- 每日一题4.12.1
每日一题4.12.1 年会抽奖 ** 参考答案:**
- 每日一题 20.12.18 LeetCode 389. 找不同java题解
嚯 第一次做力扣的每日一题 题目 https://leetcode-cn.com/problems/find-the-difference/ 方法一:计数 时间复杂度:O(N),其中 N 为字符串的长 ...
- 倪文迪陪你学蓝桥杯2021寒假每日一题:1.26日(2019省赛A组第4题)
2021年寒假每日一题,2017~2019年的省赛真题.本文内容由倪文迪(华东理工大学计算机系软件192班)和罗勇军老师提供.每日一题,关注蓝桥杯专栏: https://blog.csdn.net/w ...
- 【每日刷题3.12】5道算法+15道面试 - 阿V
感觉算法太占时间了,而且刷的差不多了,现在开始专攻面试!加油~明天阿里笔试. 面试题 (一面-项目介绍+基础面) 1. 自我介绍 (游戏测试工程师) 看了多篇文章,说自我介绍不能太短,最好是三分钟,哈 ...
- 蓝桥杯大赛— —每日一题(12、城堡问题)
[题目描述] = Wall | = No wall = No wall 图1是一个城堡的地形图.请你编写一个程序,计算城堡一共有多少房间,最大的房间有多大.城堡被分割成m*n(m≤50,n≤50)个方 ...
- 每日一题 2020.05.26
按扫描二维码即可答题,关注服务号"墨天轮平台",每日提醒不会错过! 网页版链接:https://www.modb.pro/test
- 每日一题(12)—— .h头文件中ifndef/define/endif的作用
.h头文件中ifndef/define/endif的作用? 分析: 防止头文件被重复包含. #ifndef _TEST_H_ #define _TEST_H_/* test.h */#endif / ...
- 【每日早报】2019/12/26
✦ 快手成央视2020年春晚独家互动合作伙伴,除夕将发10亿现金红包 ✦ 微信回应朋友圈表情包评论关闭:之前是灰度测试,目前功能暂停 ✦ 腾讯云发布云视频会议产品"腾讯会议",瞄准 ...
- Leetcode每日一题:100.same-tree(相同的树)
思路:这题首先想到了递归,如果当前p,q的值相等,那么只需比较它们的左子树和右子树,把问题分解成子问题,这样循环比较下去,当两者都是NULL的时候,返回true即可: 这里要注意边界条件: 第1,比较 ...
- 安卓 每日一题 2019年9-12月问题及答案
最新 文章连接,本文不再同步 安卓 每日一题 2019年9-12月问题及答案 文章目录 安卓 每日一题 2019年9-12月问题及答案 安卓2019年09月每日一题 安卓2019年10月每日一题 安卓 ...
最新文章
- PoseFormer:首个纯基于Transformer的 3D 人体姿态估计网络,性能达到 SOTA
- linux正则表达式sed
- 疑难杂症——解决 Cinder 僵尸卷问题
- java自学小段 产生随机数
- C# + .net下使用serialPort做串口开发 1
- java怎么做系统_Java系统监控怎么做
- 2018年AI和ML(NLP、计算机视觉、强化学习)技术总结和2019年趋势(下)
- 从0移植uboot (二) _启动流程分析
- NVIDIA教你用TensorRT加速深度学习推理计算 | 量子位线下沙龙笔记
- 人生的第一个js插件
- Node.js:使用session存储用户信息
- Jrebel 最新激活方式(2018.07.26)
- 【转】25 个常用 Matplotlib 图的 Python 代码
- 记录团队日常工作清单用什么办公软件?
- 阿卡迪亚大学计算机科学专业,阿卡迪亚大学世界排名解读
- Java web课程设计-购物系统
- 无刷电机控制基础(1)——结构和驱动电路
- 计算机专业b区大学,b区考研学校,b区考研学校排名。
- 基于Python医学院校二手书管理毕业设计-附源码201704
- web前端各种浏览器版本测试工具-turbo
热门文章
- 向Yahoo Mail的主页学习
- vue使用node-sass@4.9.0时,npm intall出错
- Thingsboard 3.1.0 - 规则链:转换数据结构
- Python 文件(文件夹)匹配(glob模块)(转载)
- C++11 线程池的实现(基于muduo)
- MySQL 表分区功能详解
- MySQL 各种变量
- Spring之IOC容器
- zynq跑linux所需内存大小,Zynq-Linux移植学习笔记之33-CMA连续物理内存配置
- linux启动mysql_允许远程连接到MySQL数据库服务器的步骤