南大算法设计与分析课程OJ答案代码(4)--变位词、三数之和
问题 A: 变位词
时间限制: 2 Sec 内存限制: 10 MB
提交: 322 解决: 59
提交 状态 算法问答
题目描述
请大家在做oj题之前,仔细阅读关于抄袭的说明http://www.bigoh.net/JudgeOnline/.
变位词是指由相同的字母组成的单词,如eat、tea是变位词。本次问题给出一串单词,你需要找到所有的变位词。
输入
输入由两行组成:第一行是所有单词的总数,第二行是由空格分隔的单词列表。两行末尾都有空格。
注:为防歧义,输入的单词都是小写
输出
这次需要大家先输出一个字符串,它是“我已阅读关于抄袭的说明”的汉语拼音.输出此行的提交我们将认为已经完全阅读并了解了“关于抄袭的说明”公告.
第二行是变位词组的个数,后面是所有的变位词。每个输出的变位词占一行。一组变位词只需要输出一个字典序最小的代表即可,如eat、tea中eat字典序小于tea,所以输出eat。变位词与变位词也按照字典序从小到大排列,如eat和el中eat字典序小于el所以eat在el前面。
输出的每一行最后都没有空格。
样例输入9 |
样例输出wo yi yue du guan yu chao xi de shuo ming |
提示
使用代价为O(nlgn)的方法。
代码
复杂度要达到nlogn,读入输入字符串是n复杂度,就是说插入部分为logn的复杂度,肯定就是使用树结构,c++中map使用平衡二叉树实现,可以直接使用。
int main()
{
int len = ;
cin >> len;
/*
第一个string代表sort(temp.begin(), temp.end()),这是为了把变位词聚集在一起
第二个string代表一个变位词集合中最小的元素
第三个int代表出现次数
*/
map<string, pair<string,int>> m;
int result = ;
string temp;
for (int i = ; i < len; i++) {
cin >> temp;
string orgin = temp;
sort(temp.begin(), temp.end());
m[temp].second++;
if (m[temp].second == )
m[temp].first = orgin;
else if (m[temp].second >= ) {
if (orgin < m[temp].first)
m[temp].first = orgin;
if(m[temp].second == )
result++;
}
} cout << "wo yi yue du guan yu chao xi de shuo ming" << endl;
cout << result << endl;
vector<string> v;
v.reserve(result);
for (auto k = m.begin(); k!=m.end() ; k++) {
if ((*k).second.second >= )
v.emplace_back((*k).second.first);
}
//m是使用string内部字符排序后的值作为索引,还要排个序
sort(v.begin(), v.end());
for (auto q = v.begin(); q != v.end(); q++)
cout << *q << endl; return ;
}
问题 B: 三数之和
时间限制: 1 Sec 内存限制: 2 MB
提交: 113 解决: 56
提交 状态 算法问答
题目描述
输入
数组长度,以及要求的三数之和;
没有重复元素的数组。
输出
已阅读抄袭的说明;
所有triple的个数。
样例输入6 3 |
样例输出wo yi yue du guan yu chao xi de shuo ming |
提示
代码
题目没有重复元素,简便了一些,先排序,然后确定一个元素的位置,剩下两个元素采用两边逼近的方式来求。可以见Leetcode15,3 sum问题,比这个稍微复杂一点,思路完全相同
int main()
{
int len = ;
int sum = ;
cin >> len;
cin >> sum;
vector<int> v;
v.reserve(len);
int temp;
for (int i = ; i < len; i++) {
cin >> temp;
v.emplace_back(temp);
}
sort(v.begin(), v.end());
int times = ;
for (int i = ; i < len - ; i++) {
int pos2 = i + ;
int pos3 = len - ;
while (pos2 < pos3) {
if (v[i] + v[pos2] + v[pos3] < sum) {
pos2++;
}else if(v[i] + v[pos2] + v[pos3] > sum){
pos3--;
}else {
times++;
pos2++;
}
}
}
cout << "wo yi yue du guan yu chao xi de shuo ming" << endl;
cout << times << endl; return ;
}
南大算法设计与分析课程OJ答案代码(4)--变位词、三数之和的更多相关文章
- 南大算法设计与分析课程OJ答案代码(1)中位数附近2k+1个数、任意两数之和是否等于给定数
问题1 用来测试的,就不说了 问题2:中位数附近2k+1个数 给出一串整型数 a1,a2,...,an 以及一个较小的常数 k,找出这串数的中位数 m 和最接近 m 的小于等于 m 的 k 个数,以及 ...
- 南大算法设计与分析课程OJ答案代码(3)
问题 A: 动态中位数问题 时间限制: 1 Sec 内存限制: 8 MB提交: 866 解决: 102提交 状态 算法问答 题目描述 输入一组整数a1, a2, …, an ,每输入一个整数,输出 ...
- 南大算法设计与分析课程OJ答案代码(5)--割点与桥和任务调度问题
问题 A: 割点与桥 时间限制: 1 Sec 内存限制: 5 MB提交: 475 解决: 34提交 状态 算法问答 题目描述 给出一个无向连通图,找到所有的割点和桥 输入 第一行:点的个数,如果点 ...
- 南大算法设计与分析课程OJ答案代码(2)最大子序列和问题、所有的逆序对
问题 A: 最大子序列和问题 时间限制: 1 Sec 内存限制: 4 MB提交: 184 解决: 66提交 状态 算法问答 题目描述 给定一整数序列 a1, a2, …, an,求 a1~an 的 ...
- 南大算法设计与分析课程复习笔记(1) L1 - Model of computation
一.计算模型 1.1 定义: 我们在思考和处理算法的时候是机器无关.实现语言无关的.所有的算法运行在一种“抽象的机器”之上,这就是计算模型. 1.2 种类 图灵机是最有名的计算模型,本课使用更简单更合 ...
- 南大算法设计与分析课程复习笔记(4)L4 - QuickSort
一.快速排序 算法导论上关于快速排序有两种写法 第一种,从头到尾遍历,不断将小于基准元素的项移到前面.代码很简介,只需要维护一个交换位置,表示小于基准元素的末尾位置加一 我们看算法导论上的一个例子: ...
- 南大算法设计与分析课程复习笔记(3)L3 - Recursion
一.递归方程 按照分治的思想,可以将一个递归的复杂度写成递归方程 一.解递归方程--猜然后证明 该方法又称为代入法,步骤如下: 1.猜解的形式 2.数学归纳法证明正确 例子: 我们假设有如下递归式: ...
- 南大算法设计与分析课程复习笔记(2)L2 - Asymptotics
一.几种比较复杂度的符号 数据结构有描述,相关严格数学定义也不想说了,就这么过了吧. 二.最大子数组的几种解决方法 从最复杂的暴力解法过渡到最简单的动态规划 解析和代码见这里:http://www.c ...
- 算法设计与分析 - AC 题目 - 第 5 弹(重复第 2 弹)
PTA-算法设计与分析-AC原题 - 最大子列和问题 (20分) 给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+, ..., Nj },其中 ≤i ...
随机推荐
- <笔记>TP5的分页传递额外参数
默认生成的分页只有page一个参数,若需要提供额外的参数才能访问分页(例如查询结果的分页,需要传入查询关键字的参数才能显示结果),则需要设置额外参数query
- python 初级重点
关于python初学时遇到的重点: 1 python 2 和3 的区别 python2**不识别中文** -*- coding: utf-8 -*-(因为不能识别中文,所以代码有中文时需要在最前面加入 ...
- 【Android开源库】 PagerSlidingTabStrip从头到脚
简介 PagerSlidingTabStrip,是我个人经常使用到的一个和ViewPager配合的页面指示器,可以满足开发过程中常用的需求,如类似于今日头条的首页新闻内容导航栏等等,之前自己开发的Ju ...
- PHP中 PCRE正则表达式模式修饰符“u” 的使用。
u (PCRE_UTF8) 此修正符打开一个与 perl 不兼容的附加功能. 模式字符串被认为是utf-8的. 这个修饰符 从 unix 版php 4.1.0 或更高,win32版 php 4.2.3 ...
- 【.NET Core项目实战-统一认证平台】第五章 网关篇-自定义缓存Redis
[.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章我们介绍了2种网关配置信息更新的方法和扩展Mysql存储,本篇我们将介绍如何使用Redis来实现网关的所有缓存功能,用到的文档及源码 ...
- 背水一战 Windows 10 (116) - 后台任务: 前台程序激活后台任务
[源码下载] 背水一战 Windows 10 (116) - 后台任务: 前台程序激活后台任务 作者:webabcd 介绍背水一战 Windows 10 之 后台任务 前台程序激活后台任务 示例演示后 ...
- php安全编程&python测试实例编写
前言 本文首发i春秋论坛. 本篇文章主要分享一个python暴破脚本,该脚本采用optparse模块,支持自定义字典位置:用了多线程(虽然我感觉和单线程速度差不多..是我的错觉还是线程写的不对..求表 ...
- Ubuntu16.04设置静态ip
给Ubuntu系统配置一个静态IP ,方法如下 : 1. sudo vi /etc/network/interfaces (本人更推荐使用 sudo gedit /etc/network/inter ...
- [Leetcode]895.最大频率栈
Problem 实现 FreqStack,模拟类似栈的数据结构的操作的一个类. FreqStack 有两个函数: push(int x),将整数 x 推入栈中. pop(),它移除并返回栈中出现最频繁 ...
- mongo 让字段自增或自减
查询语句 db.getCollection("A表").update( { id: 1 }, { $inc: { pid: 1} } ) 作用:根据条件让A表中的pid字段自增1 ...