1,求区域中矩形最多重叠的个数
题目网址:https://www.nowcoder.com/test/question/done?tid=14633045&qid=152611#summary
解题思路:首先考虑暴力解,要想求得最大重叠区域,就遍历每个点最多在多少个矩形中出现,但是由于点坐标过大,肯定会超时。优化方法就是将所有矩形的横纵坐标存起来,求这些坐标组成的点最多在多少个矩形中出现,就可以了。总的时间复杂度为O(n*n*n).
#include <bits/stdc++.h> using namespace std; const int maxn = 50 + 5; int X1[maxn], Y1[maxn]; int X2[maxn], Y2[maxn]; set<int> xx, yy; int a[1010],b[1010]; int main() { int n; cin >> n; for(int i = 0; i < n; i++) { cin >> X1[i]; a[i] = X1[i]; } for(int i = 0; i < n; i++) { cin >> Y1[i]; b[i] = Y1[i]; } for(int i = 0; i < n; i++) { cin >> X2[i]; a[i+n] = X1[i]; } for(int i = 0; i < n; i++) { cin >> Y2[i]; b[i+n] = Y1[i]; } int ans = 0; for(int x =0;x<2*n;x++) { for(int y=0;y<2*n ;y++) { int cnt = 0; for(int i = 0; i < n; i++) { if(X1[i] <= a[x] && Y1[i] <= b[y] && X2[i] > a[x] && Y2[i] > b[y]) cnt++; } ans = max(ans, cnt); } } cout << ans << endl; return 0; }
2,求数对
解题思路:首先考虑暴力解,由于数据量为10^5,时间复杂度为O(n^2)肯定会超时,优化:根据 y 来求解每个 y 有多少可能的对数量。 因为 y 小于等于 k 时,不存在大于等于 k 的余数,所以从 y=k+1 开始到 n 分别求解。接下来说明当 y 为任一值 i 时有多少对数。判断 x 在 n 中,每 i 个数中共有 i-k 个 x 取值使得条件成立,余数为k,k+1,k+2,…,i-1 共 i-k 个。所以在 n 中的前一部分总共会有((int)(n/i))*(i=k)在不能整除 i 的部分,如果 n%i<k,那么这部分不存在满足条件的对数,否则此部分的满足条件的对数为 n%i-k+1对 y 的每个值都计算上两个部分,并计数,可以在O(n)的时间内实现。特殊情况考虑,当K为0时,由于在计算n%i>=k时,不能出现余数为0 的情况,这里每次都多加了1.需要减去n。
#include <bits/stdc++.h> using namespace std; int main() { int n,k; while(scanf("%d %d",&n,&k)!=EOF) { long long int sum = 0; for(int i=k+1;i<=n;i++) { int p = n/i; sum+=p*(i-k); if(n%i>=k) sum+=(n%i - k+1); } if(k==0) sum-=n; printf("%lld\n",sum); } }
3,找工作
解题思路:首先将小伙伴的工作能力和难度一起排序,时间复杂度为O((n+m)*log(n+m)),然后从前往后扫一遍,需要使用map映射,
记录下标为i的小伙伴能获得的最大报酬,时间复杂度为O(n+m),总的时间复杂度为O((n+m)*log(n+m))
#include <bits/stdc++.h> using namespace std; const int maxn = 100010; struct p { int x,y; int id; }; int cmp(p a,p b) { if(a.x==b.x) return a.id < b.id; else return a.x<b.x; } p a[2*maxn]; map<int,int>mp; int main() { int n,m; scanf("%d %d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d %d",&a[i].x,&a[i].y); a[i].id = 0; } for(int i=n+1;i<=m+n;i++) { scanf("%d",&a[i].x); a[i].y = 0; a[i].id = i-n; } sort(a+1,a+1+n+m,cmp); int maxx = 0; for(int i=1;i<=n+m;i++) { maxx = max(a[i].y,maxx); if(a[i].id!=0) { mp[a[i].id] = maxx; } } int s; for(int i=1;i<=m;i++) { printf("%d\n",mp[i]); } }
相关推荐
《ZJOI2019题面以及简要题解》 ZJOI,全称为“中国中学生程序设计竞赛”,是一项旨在提升中学生计算机科学素养、培养算法思维能力的重要赛事。2019年的ZJOI吸引了众多编程爱好者参与,尽管有些人未能亲临现场,但...
本次分享的内容源自于2019年的ACM-ICPC(国际大学生程序设计竞赛)新疆省赛,这是一个全球范围内极具影响力的比赛,旨在培养大学生的算法设计和编程能力。比赛通常包含一系列的算法题目,参赛队伍需要在有限的时间内...
微软笔试题《Arithmetic Puzzles》题解,里面有详细答案
《蓝桥杯2019VIP题目+题解》是一个针对“蓝桥杯”编程竞赛的资源包,其中包含了该赛事2019年度的VIP级别试题及其解答。这个压缩包是参赛者或者对编程竞赛感兴趣的学习者的重要参考资料,旨在帮助他们提升编程技能,...
"2017-2019蓝桥杯省赛题解.rar" 是一个压缩包文件,其中包含了从2017年至2019年蓝桥杯算法竞赛的省级比赛题目解析。蓝桥杯是一项知名的全国性编程与算法竞赛,旨在提升大学生的计算机科学技能,特别是算法设计和实现...
从提供的文件内容来看,这篇题解文档涵盖了NOIP 2019模拟赛Contest1中的三个问题:序列seq、灯泡bulb和比赛match的解法。文档中描述了每个问题的解题思路、关键算法和时间复杂度分析。下面我将详细介绍每个问题的...
第二本:国际大学生程序设计竞赛例题解 2 广东省大学生程序设计竞赛试题 2003-2005年 第三本:国际大学生程序设计竞赛例题解 3 图论·动态规划算法·综合题专集 第四本:国际大学生程序设计竞赛例题解 4 广东省...
BNF.txt fibonacci.txt link.txt misc.txt 二叉树公共祖先.txt 二叉树路径.txt 大数运算.txt 排序.txt 最小公倍数和最大公约.txt 求值表达式.txt 测试用例.txt 英文名词.txt 链表循环检测.txt
这份"2013年最新年java笔试题大集合及答案(附各大公司笔试题)"的资源,无疑是为准备Java程序员面试的求职者提供了一座丰富的知识宝库。下面,我们将深入探讨这些知识点,并结合可能出现在各大公司笔试中的主题进行...
国际大学生程序设计竞赛例题解.iso国际大学生程序设计竞赛例题解.iso
题解和标程.pdf题解和标程.pdf题解和标程.pdf题解和标程.pdf题解和标程.pdf题解和标程.pdf题解和标程.pdf题解和标程.pdf题解和标程.pdf题解和标程.pdf题解和标程.pdf题解和标程.pdf题解和标程.pdf题解和标程.pdf题解...
2021年12月11日新生赛题解.md
知识点1:物理笔试题型结构 文档中提到的物理笔试包括两个部分:第Ⅰ卷为选择题,第Ⅱ卷为非选择题。第Ⅰ卷又分为单选题和多选题,分别有不同的评分标准。选择题需要填写到答题纸的指定位置。 知识点2:物理试题...
【国际大学生程序设计竞赛例题解(七)-又是主题医院】这道题目涉及的核心知识点是ACM(国际大学生程序设计竞赛)中的算法设计和模拟,以及数学中的轮换和最大公约数(GCD)计算。 题目背景设定在一个医院中,医生...
自己写的蓝桥杯的算法题目,根据题目解题想参考的可以看看,文章也有
本压缩包包含了USACO比赛的题解、源代码以及对应的中文翻译,对于想要参加或者正在准备USACO的同学们来说,无疑是一份宝贵的资源。 首先,让我们来详细了解USACO题解部分。USACO的比赛题目通常涉及各种算法,包括但...
此外,本书还收录了一些研究生入学试题和各种物理竞赛题,旨在帮助备考研究生入学考试以及物理竞赛的学生。作者在书中多次强调,学生在解题时首先需要明白物理概念,其次要能够熟练运用数学计算。例如,解决电磁学...
很好的360笔试编程内推题,需要较好的编程功底,当然对于一些人来说是很简单
《ACM国际大学生程序设计竞赛题解》是针对ACM/ICPC(国际大学生程序设计竞赛)的一本重要参考资料,由赵端阳和袁鹤共同编写。这本书包含了丰富的算法解析和实战题解,旨在帮助参赛者提升编程技能和解决复杂问题的...