NOIP模拟测试26「嚎叫响彻在贪婪的机房·主仆见证了 Hobo 的离别·征途堆积出友情的永恒」...

题目比较神仙,注意是题目神仙

贪婪暗示贪心,堆积暗示堆优化$\%\%\%\%\%\%\%$

两个乱搞$+$一个堆优化$dp$

嚎叫响彻在贪婪的机房

题解

对于一个序列来说只要他们差的$gcd$不为$1$就可以构成等差数列

例如

$2$    $4$     $16$

$2$与$4$差$2$ $4$与$16$差$12$ 

$gcd(2,12)!=1$故构成等差序列

那么我们维护公差,然后每次的差和当前公差比较,若$gcd==1$则等差数列从这里断开,否则将公差置成$gcd$

举个例子

$2$     $8$    $14$      $16$     $18$      $20$

$2$     $8$    $14$构成公差为$6$等差数列,之后$16$     $18$      $20$构成公差为$2$等差序列

显然我们可以让他们合并为公差为$2$等差序列

注意判重,判差为$1$,

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define A 1111111
ll read(){ll x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x*f;
}
set<ll> st;
set<ll> ::iterator it;
ll n,m,d=0,ans=0;
ll a[A];
void  cl(ll x){st.clear();d=0;ans++;st.insert(a[x]);
}
ll gcd(ll x,ll y){if(y==0) return x;return gcd(y,x%y);
}
int main(){n=read();for(ll i=1;i<=n;i++){a[i]=read();}cl(1);for(ll i=2;i<=n;i++){if((it=st.find(a[i]))!=st.end()) {
//        printf("i=-%lld\n",i);
            cl(i);continue;}if(abs(a[i]-a[i-1])==1||a[i]==a[i-1]){cl(i);continue;}
//        printf("d=%lld\n",d);if(d==0){st.insert(a[i]);d=abs(a[i]-a[i-1]);}else {ll g=gcd(d,abs(a[i]-a[i-1]));
//            printf("g=%lld d=%lld abs=%lld\n",g,d,abs(a[i]-a[i-1]));if(g==1||g==0){cl(i);}else {st.insert(a[i]);d=g;}}}printf("%lld\n",ans);
}
View Code

主仆见证了 Hobo 的离别

题解

建边,建立包含关系的树,例如$1,2$交集为$3$那么$1$包含$3$,$2$包含$3$

再例如$1,2$并集为$3$那么$3$包含$1$,$3$包含$2$

询问$x$,$y$所属关系就从$y$开始$dfs$若找到$x$即符合

暴力就是正解

让我们分析一下复杂度

题目中说

新元件的编号等于融合之前元件的总个数加一。当然,参与融合的 K个元件融合之后依然存在,并且每个元件至多参与一次融合

数据范围

 

极限情况下肯定就是分开连边

那么$250000$个分开连边,产生$125000$,然后下一层产生$62500$再下一层.....

显然是$log$的最终是$18$层

而且我们建出来树是下图这样的从一点往下搜

 

所以极限复杂度$18*250000$可过

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define A 1111111
ll read(){ll x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x*f;
}
ll n,m,cnt,ok,tot=0;
ll some[A],fa[A],nxt[A],ver[A],head[A];
ll find(ll x){if(fa[x]!=x){fa[x]=find(fa[x]);}return fa[x];
}
void haha(){for(ll i=1;i<=500000;i++){fa[i]=i;}
}
void merge(ll x,ll y){x=find(x),y=find(y);if(x!=y) fa[x]=y;
}
void add(ll x,ll y){
//    printf("x=%lld y=%lld\n",x,y);nxt[++tot]=head[x],head[x]=tot,ver[tot]=y;
}
void dfs(ll x,ll pre,ll ineed){if(x==ineed) ok=1;if(ok) return ;for(ll i=head[x];i;i=nxt[i]){ll y=ver[i];if(y==pre) continue;dfs(y,x,ineed);}
}
/*ll ithave[A],beihave[A];
ll getithave(ll x){if(ithave[x]!=x){ithave[x]=getithave(ithave[x]);}return ithave[x];
}
void mergeit(ll x,ll y){x=getithave(x);y=getithave(y);if(ithave[x]!=ithave[y]){ithave[x]=y;}
}
ll getbeihave(ll x){if(beihave[x]!=x){beihave[x]=getbeihave(beihave[x]);}return beihave[x];
}
void mergebei(ll x,ll y){x=getbeihave(x);y=getbeihave(y);if(beihave[x]!=beihave[y]){beihave[x]=y;}
}*/
int main(){n=read(),m=read();cnt=n;for(ll i=1,opt,ques,k,QwQ;i<=m;i++){ques=read();if(ques==0){opt=read(),k=read();cnt++;if(opt==1){for(ll j=1;j<=k;j++){QwQ=read();//1属于2 1--->2
                    add(cnt,QwQ);if(k==1)add(QwQ,cnt);}}else {for(ll j=1;j<=k;j++){QwQ=read();add(QwQ,cnt);if(k==1)add(cnt,QwQ);}}}else{ok=0;ques=read(),QwQ=read();dfs(QwQ,0,ques);printf("%lld\n",ok);}}
}
View Code

征途堆积出友情的永恒

题解

 首先普通dp应该都会吧

$f[i]=min(f[j]+max(sum[i]-sum[j],b[j]))$

    for(ll i=1;i<=n;i++){for(ll j=max(i-k,0ll);j<=i-1;j++){ll fee=max(sum[i]-sum[j],a[j]);f[i]=min(f[j]+fee,f[i]);}}
一言不和上代码

怎么优化,

线段树或者堆

思考sum[i]变化很烦,线段树很难维护(然而Mr_zkt维护出来了$%%%$)我没打线段树

用堆维护我们需要寻找不变量显然$f[j]+b[j]$和$f[j]-sum[j]$是不变量

开两个小根堆,一个维护$min(f[j]+b[j])$一个维护$f[j]-sum[j]$

转移时$min(q1.top(),q2.top+sum[i])$

细节稍多

  • $STL$的各种$empty$往上仍,
  • 判断是否可以转移(<=k)限制
  • 在$f[j]+b[j]$$<$$f[j]-sum[j]+sum[i]$时第一个堆不合法,第一个堆扔到第二个堆

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define A 1010101
ll f[A],a[A],sum[A],b[A];
ll n,k,minn;
struct node{ll id,val;friend bool operator < (const node &a,const node &b){return a.val>b.val;}
};
priority_queue<node> q1,q2;
//q1用来存f+b q2存 f-s
ll read(){ll x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}while(isdigit(c)){x=x*10+(c-'0');c=getchar();}return f*x;
}
void work(){memset(f,0x3f,sizeof(f));f[0]=0;node o;o.id=0,o.val=b[0];q1.push(o);for(ll i=1;i<=n;i++){node x1,x2;while(!q1.empty()){x1=q1.top();if(x1.id>=i-k) break;q1.pop();}while(!q2.empty()){x2=q2.top();if(x2.id>=i-k) break;q2.pop();}while(!q1.empty()){x1=q1.top();if(x1.val>=f[x1.id]-sum[x1.id]+sum[i]) break;
//            printf("feifa\n");
//            printf("x1.val=%lld id=%lld f-s=%lld\n",x1.val,x1.id,f[x1.id]-sum[x1.id]+sum[i]);
            q1.pop();node x3;x3.id=x1.id,x3.val=f[x1.id]-sum[x1.id];q2.push(x3);}while(!q1.empty()){x1=q1.top();if(x1.id>=i-k) break;q1.pop();}while(!q2.empty()){x2=q2.top();if(x2.id>=i-k) break;q2.pop();}
//        printf("q1.top id=%lld val=%lld 2=%lld %lld\n",x1.id,x1.val,x2.id,x2.val);//f[i]=min(x1.val,x2.val+sum[i]);if(!q1.empty())f[i]=min(0x7ffffffffff,q1.top().val);if(!q2.empty())f[i]=min(0x7ffffffffff,q2.top().val+sum[i]);
//        printf("f[%lld]=%lld\n",i,f[i]);x1.id=i,x1.val=f[i]+b[i];q1.push(x1);}
}
int main(){n=read(),k=read();for(ll i=1;i<=n;i++){sum[i]=read();sum[i]+=sum[i-1];}for(ll i=0;i<n;i++){b[i]=read();}work();printf("%lld\n",f[n]);
}
View Code

 

转载于:https://www.cnblogs.com/znsbc-13/p/11377871.html

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

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

相关文章

渴望订阅– RxJava常见问题解答

在教学和指导RxJava以及撰写本书之后 &#xff0c;我注意到某些领域尤其成问题。 我决定发布一些简短的提示&#xff0c;以解决最常见的陷阱。 这是第一部分。 Observable和Flowable本质上是惰性的。 这意味着无论您在Flowable放置了多么繁琐或长时间运行的逻辑&#xff0c;仅…

WPScan高级用法和定制

自定义扫描选项 WordPress作为一个广泛使用的内容管理系统&#xff08;CMS&#xff09;&#xff0c;为用户提供了丰富的自定义选项&#xff0c;使其能够根据特定需求创建个性化的网站。其中一个重要的自定义选项是自定义扫描选项&#xff0c;它允许用户对WordPress网站进行深度…

r语言中正定矩阵由于误差不正定_R语言之数据处理(一)

在上一篇小文中&#xff0c;提到了关于R语言导入数据的一些方法&#xff0c;之后的重点就转向了数据的处理上。数据处理其实在整个数据分析项目中所占用的时间是比较多的&#xff0c;所以根据处理的目的不同&#xff0c;也有不同的处理方法。在R语言中&#xff0c;我通常会将数…

【chromium】 渲染显示相关概念

DRM(Direct Rendering Manager) DRM 由两个部分组成&#xff1a;一是 Kernel 的子系统&#xff0c;这个子系统对硬件 GPU 操作进行了一层框架封装。二是提供了一个 libdrm 库&#xff0c;里面封装了一系列 API&#xff0c;用来进行图像显示。 说到这里&#xff0c;其实这么理解…

ASP.NET Core MVC 之区域(Area)

区域&#xff08;Area&#xff09;是一个 ASP.NET MVC 功能&#xff0c;用于将相关功能组织为一个单独的命名空间&#xff08;用于路由&#xff09;和文件结构&#xff08;用于视图&#xff09;。使用区域通过向控制器和操作添加 一个路由参数&#xff08;area&#xff09;来创…

esp32 arduino adc_英雄联盟手游射手出装怎么出 adc英雄出装推荐

2020-11-02 18:06:31 角色扮演 人气值&#xff1a;加载中...英雄联盟手游adc怎么出装备&#xff1f;英雄联盟手游虽然没有上线国服和台湾服&#xff0c;但是我们已经有很多热心的玩家在外服中研究出了各种射手的玩法&#xff0c;那么adc要怎么出装呢&#xff1f;小编已经准备…

camel.js_Camel 2.11 –没有Spring的Camel Web应用程序

camel.js在撰写本文时&#xff0c;我们刚刚向即将到来的Apache Camel 2.11添加了一个新组件&#xff0c;该组件允许使用Camel运行Web应用程序&#xff0c;而不必依赖Spring Framework来加速Camel。 或与此相关的任何其他第三方框架。 有点as愧地说&#xff0c;在2013年&#x…

宅男计划

题解 $dp$不行考虑三分 发现单峰 1.理性打表,得到单峰 2.感性思考,你会发现你买食物次数越多,你钱数越少,你买的好食品更多,你买食物次数越少,你钱数越多,然而你必须买一些价格贵保质期长弥补次数少. 单峰,我们三分就完了(其实也可以模拟退火,然而我参数爆炸了一直60分) 那么$c…

.net 后台 下载 图片_特殊的 “图片软件” !

01 引语简单的图片处理软件我说过不少&#xff0c;像windows自带的图片编辑、在线处理图片的稿定设计、或者ps的一些插件。虽然我知道这类工具型软件的文章&#xff0c;大多数小伙伴都只是随便看一眼&#xff0c;心里默念 “咦&#xff0c;好像有用&#xff01;”&#xff0c;…

流操作中的noException

本文介绍了一些简单的编码实践。 没什么好看的。 在StackOverflow上也进行了讨论。 您只是将一个庞大而复杂的循环重构为一个更具可读性的流表达式&#xff0c;而忘记了某些方法调用引发了异常。 包含此代码的方法将引发此异常&#xff0c;该异常在方法头中声明。 您不想在此级…

optimize table 需要多久_吉林市政工程资质新办需要多久

七。 暖通空调专业&#xff1a;水暖工程&#xff0c;建筑环境与设备&#xff0c;环境工程&#xff0c;暖通空调&#xff0c;供暖和通风与空调&#xff0c;制冷和空调&#xff0c;水暖&#xff0c;供暖和通风&#xff0c;HVAC&#xff0c;公共设备安装。如何申请第三级土木工程资…

Java EE 6 开发环境

软件安装&#xff1a; 选择 Glassfish 支持 Java EE 6 的最新版本 3.1.2.2根据 Glassfish 3.1.2 的 certification matrix&#xff0c;要求 JDK 1.6 update 29&#xff0c;因此&#xff0c;选择 JDK 6 最新版本 JDK 6u45选择 Eclipse Indigo&#xff0c;其之后的版本要求 JDK 7…

mysql连接不断线_某些小时后MySql连接自动掉线

mysql连接不断线MySql配置为删除任何闲置超过8小时的连接。 这意味着什么&#xff1f; 在8个小时的间隔后返回到已部署的应用程序之后&#xff08;如果未更改默认SQL参数&#xff09;&#xff0c;将会遇到异常情况。 如何解决这个问题&#xff1f; 增加wait_time参数-不是一个…

pb65 xp 安装无反应_长春优质AFB型耐腐蚀泵安装

长春优质AFB型耐腐蚀泵安装 k5b5b5s长春优质AFB型耐腐蚀泵安装 并及时更换轴套。而随着科技的不断发展&#xff0c;新式设备的问世&#xff0c;设备一般都开始被筛选。无密封自吸泵无密封自吸泵就是一种新式泵&#xff0c;该泵密封可靠&#xff0c;选用无泄漏密封设备&#xff…

虚函数探秘

C的多态分为动态多态和静态多态&#xff0c;其中静态多态主要靠重载和模板来实现&#xff0c;而动态多态则主要靠继承来实现了。 那么静态和动态&#xff0c;怎么算静&#xff0c;怎么算动呢&#xff1f;静态多指编译期能决定的事情&#xff0c;而动态多指运行时才决定的事情。…

Errai框架简介

Errai是Red Hat开发和维护的框架&#xff0c;旨在结合GWT和JEE世界的优点。 根据Red Hat的说法&#xff0c;Errai是基于GWT的框架&#xff0c;用于使用下一代Web技术构建富Web应用程序。 在此简单声明的背后&#xff0c;存在一种与GWT完全不同的开发方式&#xff0c;在下面的文…

动态壁纸安卓_高清无水印!这4款壁纸软件,让你的手机好看又独特

手机与我们每日相伴&#xff0c;我们总会精心挑选各种图片设置为手机壁纸&#xff0c;有时换个壁纸就像换了一种心情一样。但网上搜索的壁纸大同小异&#xff0c;有没有风格独特又有趣的&#xff1f;今天就给大家推荐4款各具特色的壁纸App&#xff0c;保证给你耳目一新的感觉。…

在线生成安卓APP图标

移动应用图标/启动图生成工具&#xff0c;一键生成所有尺寸的应用图标/启动图 在线生成安卓APP图标生成 图标在 线 在线图标 安卓图标 生成图标 https://icon.wuruihong.com/ 在线png图片压缩 png压缩 https://compresspng.com/zh/ 在线gif图片压缩 gif压缩 https://www.soog…

NOIP模拟测试29「爬山·学数数·七十和十七」

爬山题解不想写了 学数数 离散化然后找到以每一个值为最大值的连续子段有多少个,然后开个桶维护 那么怎么找以每一个值为最大值的连续子段个数 方法1(我的极笨的方法) 考试时我的丑陋思路, 定义极左值为左面第一个大于当前值的值,极右值为右面第一个大于当前值的值 ,找到最大值…

手机音频拼接软件_良心分享:业界最顶尖的软件!

01短视频的爆火&#xff0c;让全民都接触了“剪辑”要知道在最最最开始大众离它很远&#xff0c;更多是一种职业而非爱好最具影响力的是抖音、B站等平台抖音让更多人接触到了剪辑哔哩让更多人学会剪辑技术虽然抖音的视频时长普遍较短但这并不妨碍剪辑技术的展现比如&#xff0c…