14行代码AC——习题5-4 交换学生(Foreign Exchange, UVa 10763)——解题报告
励志用少的代码做高效的表达
题目(提交)链接→UVa-10763
本题为水题,因此侧重点由解题转向优化。
题意:判断第一列的数字是否与第二列的数字相同(乱序)。解题方向多样,值得探究:
1、map哈希表解法:定义map<int, int> cnt;,其中cnt[i]表示学校i对应的人数增减变化量,若有人把学校i作为出发地,则cnt[i]–;若作为目的地,则cnt[i]++。最终若是每个学校变化量均为0,说明项目可行;否则不可行。特点:时间、空间复杂度皆为O(n),都是动态开辟,基数小。为上等解法。
2、vector+sort解法:用两个vector容器分别存储第一列和第二列的数据。输入完成后排序,if(v1 == v2),则YES。特点:时间复杂度为O(nlogn),空间复杂度为O(n),但动态开辟,基数小。为中等解法。
3、数组解法:开两个大数组a[50W],b[50W],置0,分别存储第一列和第二列的数字。如:输入2 3,则a[2]++,
b[3]++;最后从头到尾遍历,if(a[i] != b[i]),则NO。
特点:时间、空间复杂度为O(n),但基数大(50w),为下等解法。
下等解法太差劲了,所以这里只给出中等、上等解法。
vector+sort解法:
#include<bits/stdc++.h>
using namespace std;
int main() {int n; while((cin >> n) && n) {vector<int> v1, v2; for(int i = 0; i < n; i++) {int x1; cin >> x1; v1.push_back(x1);int x2; cin >> x2; v2.push_back(x2);}sort(v1.begin(),v1.end()); sort(v2.begin(),v2.end());cout << ((v1 == v2) ? "YES\n" : "NO\n"); } return 0;
}
map哈希表映射解法:
#include<bits/stdc++.h>
using namespace std;
int n, a, b;
int main() {while(cin >> n && n != 0) {map<int, int> cnt; //每个学校对应的人数增减变化量for(int i = 0; i < n; i++) {cin >> a >> b;cnt[a]--; cnt[b]++; //分别代表出去与近来。 } bool isWork = true; //标记是否可行for(auto p : cnt) if(p.second != 0) {isWork = false;break;}cout << (isWork ? "YES\n" : "NO\n"); }return 0;
}
天空不会永远阴暗,当乌云退散的时候,蓝天上灿烂的阳光就会照亮大地,青草照样会鲜绿无比,花朵仍然会蓬勃开放。 ——《平凡的世界》
14行代码AC——习题5-4 交换学生(Foreign Exchange, UVa 10763)——解题报告相关推荐
- 比紫书优化,14行代码AC——例题 5-7 丑数(Ugly Numbers,UVa 136)——解题报告
题意: 丑数是一些因子只有2,3,5的数.数列1,2,3,4,5,6,8,9,10,12,15--写出了从小到大的前11个丑数,1属于丑数.现在请你编写程序,找出第1500个丑数是什么. 没有输入 输 ...
- 16行代码AC——例题6-4破损的键盘(Broken Keyboard,UVa 11988)——解题报告
励志用尽量少的代码做高效的表达. 题目(提交)链接→UVa-11988 题目大意: 输入一个字符串,输出在原本应该是怎么样的? 具体方法是: 若读取到'[', 则执行Home键:将光标移到行首. 若读 ...
- 11行代码AC——习题2-4 子序列的和(subsequence)——解题报告
励志用尽量少的代码做高效的表达. 题目描述: 输入两个正整数n<m<106,输出1/(n²)+1/((n+1)²)+--+1/(m²),保留5位小数.输入包含多组数据,结束标记为n=m=0 ...
- 31行代码AC——PTA 求二叉树的叶子结点个数 (20分)——解题报告
励志用尽量少的代码做高效的表达. 以二叉链表作为二叉树的存储结构,求二叉树的叶子结点个数. 输入格式: 输入二叉树的先序序列. 提示:一棵二叉树的先序序列是一个字符串,若字符是'#',表示该二叉树是空 ...
- 21行代码AC——习题5-1 代码对齐(Alignment of Code, UVa1593)——解题报告
题意: 输入若干行代码,要求各列单词的左边界对齐且尽量靠左,单词之间至少要空一格,每个单词不超过80个字符,每行不超过180个字符,一共最多1000行. 思路: 1.输入内容存入二维数组 2.找出每列 ...
- 26行代码AC——习题3-2 分子量 (UVa1586,Molar Mass)——解题报告
大意: 给出分子式,式中只包含以下四种元素.求分子量. C:12.01 H: 1.008 O: 16.00 N: 14.01 Sample Input 4 C C6H5OH NH2CH2COOH C1 ...
- 28行代码AC——习题3-12 浮点数(UVA 11809 - Floating-Point Numbers)——解题报告
励志用少的代码做高效的表达 题目(提交)链接→UVA-11809 算是个数学题吧,虽然在AOAPC上面给放到象征水题的第三章里面了. 这个题基本就是帮着你复习了一遍浮点数的存储方式了.浮点数在计算机里 ...
- 21行代码AC——习题3-7 DNA序列(UVa-1368)_解题报告
励志用尽量少的代码做高效表达. 题目(提交)链接→UVa-1368 思路: DNA序列:按列遍历,记录每一列出现次数最多(若同样多,则字典序最小)的字母,录入s串累加. 距离:重新遍历,录入出现次数比 ...
- 22行代码AC——习题5-6 对称轴(Symmetry,UVa1595)——解题报告
励志用尽量少的代码做高效的表达. 题目(提交)链接→UVa-1595 思路: 此题本质是一道笛卡尔坐标系上的对称性问题. 判定性问题:由于只要能判别图像是否左右对称即可,无需确认关于哪条垂直线对称,那 ...
最新文章
- 洛谷——3399 丝绸之路(背包)
- map端join和reduce端join的区别
- HDLBits答案(19)_Verilog有限状态机(6)
- radiobutton怎么变成竖排_衣服如此凌乱?怎么能忍受的了?衣柜收纳,试试这些神器吧...
- go kegg_KEGG分析及可视化
- python判断_python的判断
- 4广联达4代锁安装6.0_Aspen Plus 8.4 软件安装教程
- hibernate多对多映射关系实现
- poj_3628 动态规划
- spark RDD的理解
- 写一段jdbc连oracle的程序java类_并实现数据查询_一段Jdbc连Oracle的程序,并实现数据查询....
- python 类装饰_神坑 Python 装饰类无限递归
- AJPFX关于子类父类中的构造
- php mysql含引号报错,执行sql双引号
- 重置winsock目录
- ILSpy-Reflexil修改UnityEditor.Timeline.dll
- vs2019键盘钩子_低级键盘钩子回调函数
- 大数据分析-实验八 鸢尾花数据集分类
- android 弹跳动画效果下载,SpringyFX-SpringyFX(MG弹跳动画制作AE脚本)下载 v1.1官方版--pc6下载站...
- 常用的功率半导体器件汇总