励志用少的代码做高效的表达


题目(提交)链接→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)——解题报告相关推荐

  1. 比紫书优化,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个丑数是什么. 没有输入 输 ...

  2. 16行代码AC——例题6-4破损的键盘(Broken Keyboard,UVa 11988)——解题报告

    励志用尽量少的代码做高效的表达. 题目(提交)链接→UVa-11988 题目大意: 输入一个字符串,输出在原本应该是怎么样的? 具体方法是: 若读取到'[', 则执行Home键:将光标移到行首. 若读 ...

  3. 11行代码AC——习题2-4 子序列的和(subsequence)——解题报告

    励志用尽量少的代码做高效的表达. 题目描述: 输入两个正整数n<m<106,输出1/(n²)+1/((n+1)²)+--+1/(m²),保留5位小数.输入包含多组数据,结束标记为n=m=0 ...

  4. 31行代码AC——PTA 求二叉树的叶子结点个数 (20分)——解题报告

    励志用尽量少的代码做高效的表达. 以二叉链表作为二叉树的存储结构,求二叉树的叶子结点个数. 输入格式: 输入二叉树的先序序列. 提示:一棵二叉树的先序序列是一个字符串,若字符是'#',表示该二叉树是空 ...

  5. 21行代码AC——习题5-1 代码对齐(Alignment of Code, UVa1593)——解题报告

    题意: 输入若干行代码,要求各列单词的左边界对齐且尽量靠左,单词之间至少要空一格,每个单词不超过80个字符,每行不超过180个字符,一共最多1000行. 思路: 1.输入内容存入二维数组 2.找出每列 ...

  6. 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 ...

  7. 28行代码AC——习题3-12 浮点数(UVA 11809 - Floating-Point Numbers)——解题报告

    励志用少的代码做高效的表达 题目(提交)链接→UVA-11809 算是个数学题吧,虽然在AOAPC上面给放到象征水题的第三章里面了. 这个题基本就是帮着你复习了一遍浮点数的存储方式了.浮点数在计算机里 ...

  8. 21行代码AC——习题3-7 DNA序列(UVa-1368)_解题报告

    励志用尽量少的代码做高效表达. 题目(提交)链接→UVa-1368 思路: DNA序列:按列遍历,记录每一列出现次数最多(若同样多,则字典序最小)的字母,录入s串累加. 距离:重新遍历,录入出现次数比 ...

  9. 22行代码AC——习题5-6 对称轴(Symmetry,UVa1595)——解题报告

    励志用尽量少的代码做高效的表达. 题目(提交)链接→UVa-1595 思路: 此题本质是一道笛卡尔坐标系上的对称性问题. 判定性问题:由于只要能判别图像是否左右对称即可,无需确认关于哪条垂直线对称,那 ...

最新文章

  1. 洛谷——3399 丝绸之路(背包)
  2. map端join和reduce端join的区别
  3. HDLBits答案(19)_Verilog有限状态机(6)
  4. radiobutton怎么变成竖排_衣服如此凌乱?怎么能忍受的了?衣柜收纳,试试这些神器吧...
  5. go kegg_KEGG分析及可视化
  6. python判断_python的判断
  7. 4广联达4代锁安装6.0_Aspen Plus 8.4 软件安装教程
  8. hibernate多对多映射关系实现
  9. poj_3628 动态规划
  10. spark RDD的理解
  11. 写一段jdbc连oracle的程序java类_并实现数据查询_一段Jdbc连Oracle的程序,并实现数据查询....
  12. python 类装饰_神坑 Python 装饰类无限递归
  13. AJPFX关于子类父类中的构造
  14. php mysql含引号报错,执行sql双引号
  15. 重置winsock目录
  16. ILSpy-Reflexil修改UnityEditor.Timeline.dll
  17. vs2019键盘钩子_低级键盘钩子回调函数
  18. 大数据分析-实验八 鸢尾花数据集分类
  19. android 弹跳动画效果下载,SpringyFX-SpringyFX(MG弹跳动画制作AE脚本)下载 v1.1官方版--pc6下载站...
  20. 常用的功率半导体器件汇总

热门文章

  1. 聊一聊Kafka分区的隐藏属性——二次归类
  2. 阿里技术官最新总结一份105道Java面试题小册,看完我惊呆了
  3. Golang之变量去哪儿
  4. LiveVideoStack 2022迎春招聘
  5. 报名 | 腾讯组织的区块链技术沙龙,本周六在深圳!
  6. Unknown SSL protocol error in connection to xxx:443
  7. 浅析Hadoop的三个作业调度器
  8. 简单的combineByKey算子【看完就懂系列】
  9. 爬虫 spider08——爬取腾讯娱乐新闻【使用redis去重】
  10. 【MySQL】深入浅出剖析mysql事务锁机制 - 笔记