ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:19KB ,
资源ID:17150694      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17150694.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(NOIP复赛复习14尺取法与折半枚举Word文件下载.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

NOIP复赛复习14尺取法与折半枚举Word文件下载.docx

1、S所以从as+1开始总和最初超过S的连续子序列如果是as+1+.+at1的话,则必然有tt。用下面的图来解释比较清晰:#includecstdiocmathalgorithm#define sf scanf#define pf printfusing name space std;const int Maxn = 100010;int T,n,s;int sumMaxn;int main() int a; sf(%d,&T); while(T-) int tail = -1,head = -1;%d%dn,&s); for(int i = 0;i = s) tail = i; if(tail

2、= -1) pf(0n); continue; int Min = n; while(head =s) head +; Min = min(Min,tail - head); else if(tail setmap#define MAX 1000010#define LL long long#define INF 0x3f3f3f3fint aMAX;map cnt;set t;int p, ans = INF, st, en, sum;int main() scanf(, &p); for (int i = 0; i p; i+)scanf(, a+i), t.insert(ai); int

3、 num = t.size(); while (1) while (enp &sumnum) if (cntaen+ = 0)sum+; if (sum num) break; ans = min(ans, en-st); if (-cntast+ = 0) sum-; printf(, ans);POJ 2566给定一个数组和一个值t,求一个子区间使得其和的绝对值与t的差值最小,如果存在多个,任意解都可行。明显,借用第一题的思路,既然要找到一个子区间使得和最接近t的话,那么不断地找比当前区间的和更大的区间,如果区间和已经大于等于t了,那么不需要在去找更大的区间了,因为其和与t的差值更大,然后

4、区间左端点向右移动推进即可。所以,首先根据计算出所有的区间和,排序之后按照上面的思路求解即可。#define MAX 100010typedef pairLL aMAX, t, ans, tmp, b;int n, k, l, u, st, en;p sumMAX;LL myabs(LL x) return x=0? x:-x; while (scanf(%d %dk), n+k) sum0 = p(0, 0); for (int i = 1;= n; i+)%I64d, a+i); sumi = p(sumi-1.first+ai,i); sort(sum, sum+1+n); while

5、(k-)t); tmp = INF; st = 0, en = 1; while(en = n) b =sumen.first-sumst.first; if(myabs(t-b) t) st+; else if(b t) en+; else break; if(st = en) en+; if (u typedef long long LL;const int Maxn = 4010;int AMaxn,BMaxn,CMaxn,DMaxn;int ABMaxn * Maxn,CDMaxn * Maxn;int n;LL solved(int val) int l = 0, r = n * n

6、 - 1; LL ans; while(l = r) int mid = (l + r) / 2; if(CDmid = val) l = mid + 1; r = mid - 1; ans = r; l = 0, r = n * n - 1; val) ans = ans - r; return ans; while(sf(n)i+)sf(%d%d%d%dAi,&Bi,&Ci,&Di); int cnt = 0; for(int j = 0;j j +) ABcnt = Ai + Bj,CDcnt+= Ci + Dj; sort(CD,CD + cnt); LL ans = 0; ans +

7、= solved(0 - ABi);%lldn,ans);POJ 3977给你一个含n(n=35)个数的数组,让你在数组中选出一个非空子集,使其元素和的绝对值最小,输出子集元素的个数以及元素和的绝对值,若两个子集元素和相等,输出元素个数小的那个。思路:如果直接暴力枚举,复杂度O(2n),n为35时会超时,故可以考虑折半枚举,利用二进制将和以及元素个数存在两个结构体数组中,先预判两个结构体是否满足题意,再将其中一个元素和取相反数后排序,因为总元素和越接近零越好,再二分查找即可,用lower_bound时考虑查找到的下标和他前一个下标,比较元素和以及元素个数,不断更新即可。struct Zlong

8、 long int x;int y;bool operator (const Z& b)const if(x!=b.x) return x b.x; return yb.y;a300005,b300005;long long int c40;long long int abs1(long long int x)if(xn)&n!=0) for(int i=0;ici; int n1=n/2;1n1;i+) for(int j=0;jj&1&(i!=0|j!=0) ai-1.x+=cj; ai-1.y+; int n2=n-n1;(1n2);n2; bi-1.x+=cj+n1; bi-1.y+;

9、n1)-1; if(abs1(ai.x)sum) sum=abs1(ai.x); ans=ai.y; elseif(abs1(ai.x)=sum&ai.yans)for(inti=0; ai.x=-ai.x;n2)-1; if(abs1(bi.x) sum=abs1(bi.x); ans=bi.y; else if(abs1(bi.x)=sum&bi.y sort(a,a+(1n1)-1); sort(b,b+(1n2)-1); int t=lower_bound(b,b+(10) if(abs1(bt-1.x-ai.x) sum=abs1(bt-1.x-ai.x); ans=bt-1.y+ai.y; else if(abs1(bt-1.x-ai.x)=sum&bt-1.y+ai.y if(tn2)-1) if(abs1(bt.x-ai.x) sum=abs1(bt.x-ai.x); ans=bt.y+ai.y; else if(abs1(bt.x-ai.x)=sum&bt.y+ai.ycoutansendl;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1