秒懂算法2

视频链接 : 

希望下次秒懂的是算法题_哔哩哔哩_bilibili 

P1094 [NOIP2007 普及组] 纪念品分组

原题链接 : 

[NOIP2007 普及组] 纪念品分组 - 洛谷

 思路 :

  1. 排序 + 贪心 + 双指针
  2. 首先先对输入进来的数组进行排序(由小到大)
  3. 运用贪心的思想 : 前后结合,令l=1,r=n,若a[l]+a[r]<=w,那么a[l],a[r]可以成一组,l++,r--,ans++,否则a[r]单独成一组,r--,ans++;(这个求解过程用到双指针的思想);
  4. 该贪心思路在做题的时候想可能是对的,但是没有细究,具体的思想请参考 : 题解 P1094 【纪念品分组】 - heidoudou 的博客 - 洛谷博客

代码 : 

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'using namespace std;
typedef long long LL;
LL gcd(LL a,LL b){ return b==0 ? a : gcd(b,a%b); }
LL lcm(LL a,LL b){ return a / gcd(a,b) * b ; }
bool is_prime(int x){if(x<2) return false;
for(int i=2;i<=x/i;i++) if(x%i==0) return false; return true;}
const int N = 3e4+10,mod = 1e9+7;
int n,w,a[N];
LL ans;inline void solve(){cin>>w>>n;for(int i=1;i<=n;i++) cin>>a[i];sort(a+1,a+1+n);int l=1,r=n;while(l<=r){if(a[l]+a[r]<=w){l++; r--; ans ++;}else {r--; ans ++;}}cout<<ans <<endl;
}int main()
{IOSint _;// cin >> _;_ = 1; while(_ --) solve();return 0;
}

 P1102 A-B 数对

原题链接 : 

https://www.luogu.com.cn/problem/P1102

思路 : 

1.直接暴力,当然会tle了,hh( O(n^2) )

2.妙用map;(O(n))

3.用二分函数,upper_bound和lower_bound;对于a[i](a),其后满足 b-a=c的连续区间长度可以用二分函数来求得(当然是对于排好序的数组) O(nlogn)

详细解答请看代码 : 

代码 : 

代码(暴力) : 

 直接暴力,当然会收获tle(3个),hhh 
#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'using namespace std;
typedef long long LL;
LL gcd(LL a,LL b){ return b==0 ? a : gcd(b,a%b); }
LL lcm(LL a,LL b){ return a / gcd(a,b) * b ; }
bool is_prime(int x){if(x<2) return false;
for(int i=2;i<=x/i;i++) if(x%i==0) return false; return true;}
const int N = 2e5+10,mod = 1e9+7;
LL n,c,a[N];
LL ans;inline void solve(){cin>>n>>c;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++){if( (LL)(abs(a[i]-a[j])) == c )ans ++;}}cout << ans << endl;
}int main()
{IOSint _;// cin >> _;_ = 1; while(_ --) solve();return 0;
}

代码(用map) : 

// map
#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'using namespace std;
typedef long long LL;
LL gcd(LL a,LL b){ return b==0 ? a : gcd(b,a%b); }
LL lcm(LL a,LL b){ return a / gcd(a,b) * b ; }
bool is_prime(int x){if(x<2) return false;
for(int i=2;i<=x/i;i++) if(x%i==0) return false; return true;}
const int N = 2e5+10,mod = 1e9+7;
LL n,c,a[N];
LL ans;
map<LL,LL> mp;inline void solve(){cin>>n>>c;for(int i=1;i<=n;i++) cin>>a[i],mp[a[i]]++;for(int i=1;i<=n;i++) ans += mp[a[i]-c];cout << ans << endl;
}int main()
{IOSint _;// cin >> _;_ = 1; while(_ --) solve();return 0;
}

代码 : (二分) : 

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'using namespace std;
typedef long long LL;
LL gcd(LL a,LL b){ return b==0 ? a : gcd(b,a%b); }
LL lcm(LL a,LL b){ return a / gcd(a,b) * b ; }
bool is_prime(int x){if(x<2) return false;
for(int i=2;i<=x/i;i++) if(x%i==0) return false; return true;}
const int N = 2e5+10,mod = 1e9+7;
LL n,c,a[N];
LL ans;inline void solve(){cin>>n>>c;for(int i=1;i<=n;i++) cin>>a[i];sort(a+1,a+n+1);for(int i=1;i<=n;i++){ans += ((upper_bound(a+1,a+n+1,a[i]+c)-a)-(lower_bound(a+1,a+n+1,a[i]+c)-a));}cout << ans << endl;
}int main()
{IOSint _;// cin >> _;_ = 1; while(_ --) solve();return 0;
}

P1105 平台

原题链接 : 

平台 - 洛谷

思路 : 

结构体排序 + 暴力,其实不难,要注意细节;

不然,就像这样(aaa) : 

 

第一次排序规则 : 高度优先,编号其次,由小到大;

第二次排序规则 : 编号优先,由小到大;

注意 : 

  1. 边界相同,落到下一个上面,注意结构体排序的规则!!!

代码 : 

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'using namespace std;
typedef long long LL;
LL gcd(LL a,LL b){ return b==0 ? a : gcd(b,a%b); }
LL lcm(LL a,LL b){ return a / gcd(a,b) * b ; }
bool is_prime(int x){if(x<2) return false;
for(int i=2;i<=x/i;i++) if(x%i==0) return false; return true;}
const int N = 1e4+10;
int n,xl,xr;
struct Node{int idx,h,l,r,yl,yr;bool operator < (const Node &u) const{return h == u.h ? idx > u.idx : h < u.h;}
}a[N];bool cmp(const Node& x,const Node& y){return x.idx < y.idx;
}inline void solve(){cin>>n;for(int i=1;i<=n;i++){cin>>a[i].h>>a[i].l>>a[i].r;a[i].idx = i;}sort(a+1,a+n+1);for(int i=1;i<=n;i++){xl=0,xr=0;for(int j=i-1;j>=1;j--){if(a[j].l<a[i].l && a[j].r>a[i].l && a[j].h < a[i].h){xl = a[j].idx;break;}}for(int j=i-1;j>=1;--j){if(a[j].r>a[i].r && a[j].l<a[i].r && a[j].h < a[i].h){xr = a[j].idx;break;}}a[i].yl = xl;a[i].yr = xr;}sort(a+1,a+n+1,cmp);for(int i=1;i<=n;i++){cout << a[i].yl << " " << a[i].yr << endl;}
}int main()
{IOSint _;// cin >> _;_ = 1; while(_ --) solve();return 0;
}

EK的代码中是用的一个pair<int,int>来存yl,yr信息,思想是一样!!!

P1111 修复公路

原题链接 : 

修复公路 - 洛谷

思路 : 

并查集

代码(cv!):

#include<bits/stdc++.h>
using namespace std;
int fa[1000+10],n,m;
struct node
{int x,y,t;
}a[100000+10];//结构体大法好!
bool cmp(node fir,node sec)
{return fir.t<sec.t;
}//按照时间排序
int gf(int x)
{if(fa[x]==x) return x;return fa[x]=gf(fa[x]);//这句是路径压缩,前面的题解已经说过,此处不再阐述
}
void hb(int x,int y)
{int fx=gf(x);//找到x的祖先int fy=gf(y);//找到y的祖先fa[fx]=fy;//让fx认fy为祖先
}//合并操作
bool check()
{int sum=0;for(int i=1;i<=n;i++){if(fa[i]==i) sum++;//统计独立集合的个数if(sum==2) return 0;//发现有两个就返回false应该会省一点时间}return 1;//只有1个集合,返回true
}//判断集合个数
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) fa[i]=i;//初始化for(int i=1;i<=m;i++) scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].t);sort(a+1,a+m+1,cmp);//按时间排序for(int i=1;i<=m;i++){hb(a[i].x,a[i].y);//进行合并if(check())//如果只有1个集合{printf("%d\n",a[i].t);//输出时间return 0;//愉快的结束主程序}}printf("-1\n");//所有公路修完了仍没有联通(集合个数>=2),输出-1return 0;//愉快的结束主程序
}

P1115 最大子段和

原题链接 : 

最大子段和 - 洛谷

思路 : 

贪心,由前向后遍历,sum记录和,如果sum<0的话,sum=0(不然的话,只会对后面的sum产生负影响),循环更新ans = max(ans,sum);

代码 : 

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'using namespace std;
typedef long long LL;
int gcd(int a,int b){ return b==0 ? a : gcd(b,a%b); }
int lcm(int a,int b){ if(a==0||b==0) return 0; return (a*b)/gcd(a,b); }
bool is_prime(int x){if(x<2) return false;
for(int i=2;i<=x/i;i++) if(x%i==0) return false; return true;}
const int N = 2e5+10;
int n,x;
LL sum=0,ans = -1e9;inline void solve(){cin>>n;for(int i=1;i<=n;i++){cin>>x;sum += x;ans = max(ans,sum);if(sum < 0)	sum = 0;}cout << ans << endl;
}int main()
{IOSint _;// cin >> _;_ = 1; while(_ --) solve();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/111617.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发智能应用的新范式:大数据、AI和云原生如何构建智能软件

文章目录 1.利用大数据实现智能洞察2. 集成人工智能和机器学习3. 云原生架构的弹性和灵活性4. 实现实时处理和响应5. 数据安全和隐私保护6. 可解释性和透明性7. 持续创新和迭代8. 数据伦理和合规性 &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &a…

macOS使用命令行连接Oracle(SQL*Plus)

Author: histonevonzohomail.com Date: 2023/08/25 文章目录 SQL\*Plus安装下载环境配置 SQL\*Plus远程连接数据库参考文献 原文地址&#xff1a;https://histonevon.top/archives/oracle-mac-sqlplus数据库安装&#xff1a;Docker安装Oracle数据库 (histonevon.top) SQL*Plus…

安防视频监控/视频集中存储/云存储平台EasyCVR无法播放HLS协议该如何解决?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…

继承AndroidView Model的错误

ViewModelProvider(this)[RegisterViewModel::class.java] 一行简单的代码&#xff0c;总是报这个错误 Caused by: java.lang.NoSuchMethodException: com.xinfa.registerlogin.viewmodel.LoginViewModel. [class android.app.Application] 经过一下午的思索&#xff0c;终于找…

查看edge浏览器插件的安装位置

C:\Users\zhang\AppData\Local\Microsoft\Edge\User Data\Default\Extensions 这是我的目录&#xff0c;把中间的的替换成你的电脑用户名就可以了 你也可以先输入目录的部分名称&#xff0c;下拉找对应的目录

Spring boot中调用C/C++(dll)

添加JNA依赖 <dependency><groupId>net.java.dev.jna</groupId><artifactId>jna</artifactId><version>5.5.0</version> </dependency>准备C代码/C代码 如下是C代码&#xff0c;文件名&#xff1a;xizi.c #include <std…

【爬虫】5.5 Selenium 爬取Ajax网页数据

目录 AJAX 简介 任务目标 创建Ajax网站 创建服务器程序 编写爬虫程序 AJAX 简介 AJAX&#xff08;Asynchronous JavaScript And XML&#xff0c;异步 JavaScript 及 XML&#xff09; Asynchronous 一种创建交互式、快速动态网页应用的网页开发技术通过在后台与服务器进行…

Spring Security注销后未正确保存空的SecurityContext漏洞CVE-2023-20862

文章目录 0.前言漏洞Spring Security介绍 1.参考文档2.基础介绍3.解决方案3.1. 升级版本3.2. 临时替代方案 4.Spring Security使用教程简单代码示例 0.前言 背景&#xff1a;公司项目扫描到 Spring-security 组件 注销后未正确保存空的SecurityContext CVE-2023-20862 漏洞 高…

Angular安全专辑之三:授权绕过,利用漏洞控制管理员账户

这篇文章是针对实际项目中所出现的问题所做的一个总结。简单来说&#xff0c;就是授权绕过问题&#xff0c;管理员帐户被错误的接管。 详细情况是这样的&#xff0c;我们的项目中通常都会有用户身份验证功能&#xff0c;不同的用户拥有不同的权限。相对来说管理员账户所对应的…

数据治理与数据安全治理思考

大数据经过多年发展&#xff0c;在不同的业务场景下得到深入应用&#xff0c;在企业提升经营目标、促进经营决策&#xff0c;以及通过大数据应用促进经济发展、优化民生工程、解决生活服务便捷等场景起到了重要作用。特别是十九届四中全会史无前例的将“数据”作为新型生产要素…

java对时间序列每x秒进行分组

问题&#xff1a;将一个时间序列每5秒分一组&#xff0c;返回嵌套的list&#xff1b; 原理&#xff1a;int除int会得到一个int&#xff08;也就是损失精度&#xff09; 输入&#xff1a;排序后的list&#xff0c;每几秒分组值 private static List<List<Long>> get…

Autosar存储入门系列04_NvM的CRC比较机制及同/异步写

本文框架 0.前言1. NvM的CRC校验1.1 CRC 比较机制 2. NvM的同步写及异步写2.1 NvM的同步写2.1 NvM的异步写 0.前言 本系列是Autosar存储入门系列&#xff0c;希望能从学习者的角度把存储相关的知识点梳理一遍&#xff0c;这个过程中如果大家觉得有讲得不对或者不够清晰的地方&…

安防监控/磁盘阵列存储/视频汇聚平台EasyCVR调用rtsp地址返回的IP不正确是什么原因?

安防监控/云存储/磁盘阵列存储/视频汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等&#xff0c;以及厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等&#xff0c;能对外分发RTSP、RT…

火狐浏览器使用scss嵌套编写css无法识别问题

火狐浏览器使用scss嵌套编写css无法识别问题 版本&#xff1a; “node-sass”: “^4.14.1”, “sass-loader”: “^7.3.1”,vue版本&#xff1a; v2问题描述&#xff1a; 我的文件目录是这样的&#xff1a; 而在scss文件中我是这样书写的 .vue文件中 在火狐浏览器中 在谷…

每天 26,315 美元罚款?交通安全局要求特斯拉提供 Autopilot数据

根据美国国家公路交通安全管理局&#xff08;NHTSA&#xff09;最近的特别命令&#xff0c;特斯拉公司被要求提供关于其自动驾驶功能Autopilot的相关信息。这一命令是继NHTSA于2021年8月启动初步评估后&#xff0c;在2022年6月升级为正式调查的一部分&#xff0c;NHTSA近期对特…

文件上传漏洞-upload靶场3-4(全网最详细解读)

文件上传漏洞-upload靶场3-4关通关笔记&#xff08;全网最详细解读&#xff09; upload 第三关&#xff08;特殊后缀&#xff09; 思路 按照第一关和第二关的思路&#xff0c;先随便上传一个文件用burpsuite工具抓包&#xff0c;看它到底是前段验证还是后端验证。 上传一个we…

音频基本知识

声音传播方式: 1)声音的传播需要介质,在真空中不能传播; 2)声波属于纵波,即如下图传播方向与振动方向一致; 声音速度: 1)常温常压下,一般空气速度为340m/s; 2)温度越高,声速越大; 3)液体、固体的传播速度比空气快; 人耳可接收到的频域范围: 1)通常范围…

Gitee注册和使用

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂。 目录 1.Gitee 1.1Gitee是什么 1.2Gitee的注册以及远程仓库的创建…

解读GIS软件:从ArcGIS到山海鲸可视化的全方位介绍

在现代社会&#xff0c;地理信息系统&#xff08;GIS&#xff09;的应用已经渗透到了各个领域&#xff0c;为我们提供了丰富的地理数据分析和可视化工具。下面介绍几款常见的GIS工具软件&#xff0c;一起来了解它们的特点和优势。 1. ArcGIS: ArcGIS由Esri公司开发&#xff0c;…

AD域控统一设置桌面壁纸

这里的UNC路径是在C盘建立的共享文件夹Desktop 最后更新一下策略就可以了。