做题小结-未完成的二分写法

news/2025/1/17 0:12:32/文章来源:https://www.cnblogs.com/LteShuai/p/18675964

好像身不由己 不能自己很失败
细细品味这一首歌 又记起来了hjk。

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

这个题也是逆天了 总结 我没做出来
然后我讲下我补题的思路吧 不知道和正解一样不一样
首先最基本的思路 就是我们先对所有的取一个min 这个就是一开始要拿的
再剔除最小值 然后一直重复这个操作 知道拿到k个为止
不过写起来我应该是写头晕了 昏招频出

点击查看代码
#include<bits/stdc++.h>
#define int long long
#define debug cout<<endl<<"----------"<<endl;
const int range = 2e5+10;
using namespace std;
int n, k;
int a[range];
int s[range];
int lowbit(int x) {return x & -x;
}
void change(int x, int k) {while (x <= n)s[x] += k, x = x + lowbit(x);
}
int query(int x) {int t = 0;while (x)t += s[x], x = x - lowbit(x);return t;
}
int pre[range];
void solve(int t ) { //多测cin >> n >> k;map<int,int>ma;/*2 +4+2*/priority_queue<int, vector<int>, greater<int >> q;for(int i = 1; i <= n; i++) {cin >> a[i];ma[a[i]]++;}sort(a+1,a+1+n);int mini=a[1];if(n*mini>=k){cout<<k<<endl;return ;}	int ans=0;int cy=mini;k-=n*cy;ans=cy*n+1;for(int i=2;i<=n;i++){int temp=a[i];a[i]-=cy;if(a[i]==0)ans++;else {			if((n-i+1)*a[i]>=k){			ans+=k;			cout<<ans<<endl;return ;}ans+=(n-i+1)*a[i]+1;cy=temp;k-=a[i]*(n-i+1);	
//			cout<<cy<<" "<<i<<endl;}}cout<<ans<<endl;//	int sum = 0;
//	int ans = 0;
//	while (sum < k) {
//		int w = min(q.top(), k - sum);
//		int u = q.top();
//		q.pop();
//		u -= w;
//		sum+=w;
//		ans += w;
//		if(sum>=k)break;	
//		if (u == 0) {
//			ans++;
//		}
//	}
//	cout<<ans<<endl;
//	}
signed main() {ios::sync_with_stdio();cin.tie(0);cout.tie(0);int t;cin >> t;for(int i=1;i<=t;i++)solve(i);
}
for(int i=2;i<=n;i++){int temp=a[i];a[i]-=cy;if(a[i]==0)ans++;else {			if((n-i+1)*a[i]>=k){			ans+=k;			cout<<ans<<endl;return ;}ans+=(n-i+1)*a[i]+1;cy=temp;k-=a[i]*(n-i+1);	
//			cout<<cy<<" "<<i<<endl;}}

如果ai取完一边不行 那么就继续 这没话说
如果可以的话 这边我真的很傻逼 比如5 5 5 8 9 我们要取5 一遍
我以为要+额外的5的数量-1 算作犯错机会 其实想多了 我们是很聪明的 手里记着多少呢
每个取5个就行 不用额外犯错

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

草 实在没想到 自己现在菜的离谱了 黄题都切不出来 以前切绿就跟切菜一样。。
退役老年选手 太卑微

当时思考到了做法这些 奈何思维退化 码力变弱

第一个做法 其实就是记忆化搜索 其实改改就是一个dfs图
这个挺好的一个思路

map<int, vector<int >> ma;
map<int, int>dp;
int dfs(int x)
{if(dp[x])return dp[x];int ans=x;dp[x]=ans;for(auto i:ma[x]){ans=max(ans,dfs(i+x));		}dp[x]=ans;return dp[x];	
}
void solve(int t ) { //多测cin >> n ;dp.clear();ma.clear();for (int i = 1; i <= n; i++) {cin >> a[i];if(i==1)continue;//防止死循环if(a[i]+i-1-n>=0)ma[a[i] + i - 1 - n].push_back(i - 1);}cout<<dfs(0)+n<<endl;

第二个是 朴素写法
用set记录重复出现的 如果出现了 就把贡献加上去
(我认为的朴素写法)

set<int>s;
pair<int, int>p[range];
bool cmp(pair<int, int>x, pair<int, int>y) {if (x.first == y.first)return x.second < y.second;return x.first < y.first;
}
void solve(int t ) { //多测cin >> n ;s.clear();for (int i = 1; i <= n; i++) {cin >> a[i];p[i].first = a[i] + i - 1;p[i].second = i - 1;}s.insert(n);sort(p + 1, p + 1 + n, cmp);for (int i = 1; i <= n; i++) {if (s.count(p[i].first)) {s.insert(p[i].first + p[i].second);}}cout << *s.rbegin() << endl;

通过这道题 也学到了东西

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

三角形 就是第二条边大于第三边 这道题一个二分 一个双指针写法
我投降 我没写出来 现在就是思路能想一些出来 慢慢的就会做出来了 还在恢复

第一个就是双指针了 无论怎么改变 数组中的值还是那几个 又不能凭空变出来
先sort排序
所以 我们可以想到一个On的写法 用for循环卡住某个i 表示什么呢

如果此时l与l+1是比你大的 意味着 选你做老大就好了 那么我们只需要改变
l之前的与你之后的 然后比较下答案就行

for(int r=2;r<=n;r++){while(a[l]+a[l+1]<=a[r])l++;ans=min(ans,l-1+n-r);}

二分写法 经典Onlogn 用for循环卡住i
我当时就在想 一个最大值 一个最小值 我咋卡两个东西
人到无语是会笑的 太久没写题就是这样的 我以前做烂的模型。。
就是一个for循环卡住就行了 枚举最大值就行
二分一个mid表示最小 其实和双指针没什么区别

	int ans = 1e9;for (int i = n; i >= 2; i--) {int l = 1;int r = i - 1;//二分最小值int w = 0;while (l <= r) {int mid = l + r >> 1;if (a[mid] + a[mid + 1] > a[i]) {w = mid;r = mid - 1;} else l = mid + 1;}//		cout<<i<<" "<<w<<endl;ans = min(ans, w - 1 + n - i);}cout<<ans<<endl;

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

这题大部分代码都想到了 就是一个 //我默认n=n-1的
然后我在判断 x=0时 错了 我认为都可以的 。。。
错在这里了 其实不是

if(x==0){bool flag=0;if(y<=n)flag=1;cout<<n+1-flag<<endl;    return ;}

仔细 写写就能发现了 如果你给n=8 n-1=7 给的y时6那我可以办到 如果n=9要8我就不行了
也是 没注意样例细节 想当然了
所以答案就出来了

if(y+1>=n){/*6 7 */if(y<=n)flag=1;cout<<n+1-flag<<endl; return ;}

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

这题我做错了 我思考少了 我知道是双指针
这题先打住 需要回头补下二分写法

原题链接 方便看我的rz提交记录
https://codeforces.com/contest/2031/problem/B
https://www.luogu.com.cn/problem/CF2031B

逆天题目 wa了半天还是没做出来 看了题解 感觉自己是弱智
很明显的 对于一个数 如果他不在i+1 i i-1三个位置 永远变不回去 这是肯定的
然后就没了 果然人类精华

https://codeforces.com/contest/2031/problem/C

热知识 0和1都是完全平方数

这题考了1是完全平方数 明早写吧 刚补没多久

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

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

相关文章

java环境安装

java安装链接[https://www.oracle.com/java/technologies/downloads/#java8-windows] 1 点击程序直接一直下一步下一步就好 注意安装的时候记得把第一次出现的地址保存一下 后面会用到 会安装两次 第一次安装的是jdk 第二次安装的是jre 其中jdk是java开发工具包 jre是java运行环…

NLP-题-Bilibili

NLP-题-Bilibili ​#国科大#​ ​#复习#​ ​#nlp#​ ‍ ‍ 有错题 一、题型填空题20道,每道1分; 简答题6道,每道7分; 综合题38分(计算、设计等)二、考试内容填空题(1)卷积层作用是什么?通过卷积操作减少参数(2)池化层作用是什么? 通过采样减少网络规模(3)Prompt…

1.16 java项目

今天主要进行了后端的搭建,html页面还并未完善另外,在进行安卓程序测试时出现了问题,AVD模拟器中HAXM总是安装失败,正在查找问题解决方法

Linux系统中 ping 的平均时间

在 Linux系统中提取 ping 的平均时间使用 ping 命令可以测试网络连接的质量,包括延迟和丢包率。在 Linux 系统中,计算 ping 命令的耗时可以通过以下方法进行: ping -c 5 域名 | grep rtt min/avg/max/mdev | awk -F[ /] {print $8, $NF}ping -c 5 域名: 向 域名 发送 5 次 I…

G1原理—9.如何优化G1中的MGC

大纲 1.大对象导致频繁Mixed GC的案例 2.Mixed GC到底是在优化什么(从避免到提速) 3.Mixed GC相关参数详解之堆内存分配参数 4.Mixed GC其他相关的参数详解及优化1.大对象导致频繁Mixed GC的案例 (1)案例背景 (2)问题现场 (3)Redis缓存有什么问题 (4)缓存同步服务有什么问题 (5…

Java 中的 ZoneOffset

介绍 在我们的这个世界上因为地球是圆的,所以每个国家都会有自己特定的时区。 时区在我们对时间的使用上扮演了非常重要的角色。但又因为时区的存在,又给我们带来了很多的麻烦,比如北美地区使用的夏令时和中国统一使用东 8 区的时间等。当这些时间在我们计算机中进行体现的时…

转:gunicorn相关配置

转自:https://blog.csdn.net/xu710263124/article/details/118975404一、gunicorn的简介Gunicorn是基于unix系统,被广泛应用的高性能的Python WSGI HTTP Server。用来解析HTTP请求的网关服务。它通常是在进行反向代理(如nginx),或者进行负载均衡(如 AWS ELB)和一个web 应…

Microsoft Office 2024 下载安装教程 ,超详细教程(建议新手收藏)

大家好,我是你们的效率小专家!今天给大家带来一篇非常实用的教程——**如何安装 Microsoft Office 2024 Professional Plus**!这款软件升级不仅让我们平时常用的 Word、Excel、PowerPoint 等工具变得更加强大,还新增了很多酷炫的功能,比如数据分析、动画创作、音视频编辑等…

2025年员工绩效考核指南

为什么要进行年度绩效评估? 评估用于形式化和记录员工与其工作期望相比的工作方式。这样,可以增强或指出性能需要更改或改进。此正式评估支持薪酬决定或人员行动,例如重新分类,永久性额外关税和纠正措施。 谁需要接受评估? 作为最佳实践,任何定期工作且处于预期继续职位的…

.NET 项目如何管理资源及配置文件

.NET/WPF 项目如何管理资源及配置文件.NET项目如何管理资源及配置文件_哔哩哔哩 .NET 项目的资源及配置文件(视频中的思维导图)本文为以上视频的笔记🍉 生成操作 Build actions for files - Visual Studio (Windows) | Microsoft Learn复制到输出目录 这个是跟生成操作独立…

实战分享:如何为企业量身打造AI助理

在当今这个数字化时代,AI技术正以前所未有的速度改变着企业的运营模式。AI助理,作为连接人与技术的桥梁,正逐渐成为企业提升效率、优化决策的重要工具。然而,如何为企业量身打造一款既高效又贴合需求的AI助理,却是许多企业面临的难题。本文将结合实战经验,分享构建企业专…

常用类学习

Java常有类:Object常有方法如getClass(),hashMap(),toString(),equals(),finalize()方法。和包装类等学习视频 object类超类、基类,所有类的直接或间接父类,位于继承树的最顶层。 任何类,如没有书写extends显示继承某个类,都默认直接继承object类否则为间接继承。 obj…