南大算法设计与分析课程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 ...
随机推荐
- PHP单一文件入口框架简析
<?php /** * PHP单一文件框架设计简析 * 1.MVC架构实现 * 2.URL路由原理 */ //URL路由原理 /** * 路由作用 * 获取url中的c和a变量,执行c类对应的方 ...
- Base64格式上传文件至阿里云(java)
Controller @PostMapping("/save") public R save(@RequestBody ShareEntity share){ OSSClient ...
- FPGA计算中定标与位扩展的实现
我不知道名字取对没有,在FPGA计算中有时往往需要在不溢出的情况下将数扩大,从而获得更好的计算精度. 比如.在一个8位宽的系统中,将x=0000_0010,算术左移m=5位之后得到xt=0100_00 ...
- MySQL--MHA与GTID
##==========================================## MySQL 5.6版本引入GTID来解决主从切换时BINLOG位置点难定位的问题,MHA从0.56版本开始 ...
- 在ASP.NET MVC里对Web Page网页进行权限控制
我们在ASP.NET MVC开发时,有时候还是得设计ASP.NET的Web Page网页(.aspx和.aspx.cs),来实现一些ASP.NET MVC无法实现的功能,如此篇<Visual S ...
- Day9:html和css
Day9:html和css <head> <meta charset="UTF-8"> <title></title> <me ...
- 第48节:Java当中的集合框架
Java当中的集合框架 01 在我们班里有50位同学,就有50位对象. // 简书作者:达叔小生 Student[] stus = new Student[20]; 结果来了一位插班生,该同学因为觉得 ...
- Metasploit Framework(5)弱点扫描
文章的格式也许不是很好看,也没有什么合理的顺序 完全是想到什么写一些什么,但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道 当我们发现了目标机器开放的端口,开启的服务等等之后 就 ...
- ubuntu 16.04 下安装NVDIA的库(CUDA+CUDNN)
立志学习神经网络的同学,为了让它能够跑快一点,估计英伟达的GPU是要折腾一番的. 首先看一下什么是CUDA ? CUDA(Compute Unified Device Architecture),是显 ...
- redux源码学习笔记 - combineReducers
上一篇有了解到,reducer函数的两个为:当前state和此次dispatch的action. state的结构是JavaScript对象,每个key都可以代表着不同意义的数据.比如说 { list ...