HZOJ 20190819 NOIP模拟26题解
考试过程:
照例开题,然后觉得三道题都挺难,比昨天难多了(flag×1),T1 dp?T2 数据结构? T3 dp?事实证明我是sb然后决定先搞T2,但是,woc,这题在说什么啊,我怎么看不懂题啊,连样例都手模不出来,完了凉了,然后又看了一个半小时的题,还是没看懂心态爆炸,然后匆匆打了T1T3暴力,还自我感觉良好,觉得这么难的题,拿个150pts左右应该rank10没啥问题叭,然后出分,T1T2A了一片,然后我还暴力挂分,然后在第二机房成功倒数。
反思:
还是思考的太少啊,对题目的难度评估出现很大偏差,考试时还有时走思,这布星啊,这状态真tm差
题解:
T1 嚎叫响彻在贪婪的厂房:
其实很简单,用STL可以过掉(map或set都行,主要作用还是判重),比较显然的贪心,就是能不断就不断,感性理解一下即可,证明也挺简单的叭我就不证了我才不会说是我不会证呢考场上想到这个了,但是还是sb的打了dp,真zz啊,改了STL就能过啊。STL这些东西还是要学的啊很好用的啊
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+;
map<int,int> mp;
int a[N];
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int main(){
int n;
scanf("%d",&n);
for(int i=;i<=n;++i) scanf("%d",&a[i]);
int ans=;int l=;
while(l<=n){
int r=l+;
int k=abs(a[r]-a[l]);
mp[a[l]]=;
while((r<=n)&&(gcd(abs(a[r]-a[l]),k)!=)&&(mp.count(a[r])==)){
mp[a[r]]=;
r++;
k=gcd(abs(a[r]-a[l]),k);
}
r--;l=r+;ans++;mp.clear();
}
printf("%d",ans);
}
T1
T2 主仆见证了 Hobo 的离别:
考试时根本没看懂题,浪费一个半小时,然后就成功爆零滚粗,思博出题人语文比我还差啊艹
实际上这题只要,建边跑个dfs序,然后判一下k==1建双向边即可。实际上因为数据水直接在线dfs理论复杂度$O(n^2)$就可以水过于是旁边zkt大佬就hack别人AC代码hack了一下午233
#include<bits/stdc++.h>
using namespace std;
const int N=;
int first[N],nex[N<<],to[N<<],tot,fr[N];
int fa[N];
int judge;
void add(int a,int b){
to[++tot]=b,nex[tot]=first[a],first[a]=tot;fr[tot]=a;
}
void dfs(int x,int fa,const int tar){//cout<<x<<" "<<endl;
if(x==tar) {judge=;return ;}
for(int i=first[x];i;i=nex[i]){
int y=to[i];
if(y==fa) continue; dfs(y,x,tar);
}
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
int qsum=;
for(int i=;i<=m;++i){
int opt;
scanf("%d",&opt);
if(opt==){
int op,kk;n++;
scanf("%d%d",&op,&kk);
for(int j=;j<=kk;++j){//cout<<id<<endl;
int x;
scanf("%d",&x);
if(kk==){
fa[n]=x,fa[x]=n;
add(n,x);add(x,n);
break;
}
if(op) {add(x,n);fa[x]=n;}
else {add(n,x);fa[n]=x;}
}
}
else{
judge=;
int a,b;
scanf("%d%d",&a,&b);
dfs(a,,b);//cout<<"M"<<endl;
printf("%d\n",judge);
}
}
}
T2
T3 征途堆积出友情的永恒:
其实是比较有难度的题,但是50pts暴力和30pts骗分很好打,我明明打对了骗分还是没分啊艹
正解是堆优化dp,首先考虑暴力转移式子$f[i]=min(f[j]+max(sum[i]-sum[j],b[j]))$
我们注意到对于固定的$j$,$f[j]-sum[j]$和$f[j]+b[j]$是固定不变的,所以考虑从这两个量入手,因为我们每次只要最小的,所以用两个堆分别维护一下就好了,具体实现方法是,首先要把两个堆中不满足距离小于k的点pop掉,然后把第一个堆中小于第二个堆顶$+sum[i]$ 的点pop掉并加入第二个堆中,直到符合条件为止,再把不满足距离小于k的点pop掉,最后在更新f数组即可
感觉优化dp的题做起来还是很无力啊
看博客看到的whs dalao的dp优化总结还是挺好的,就放过来了
总结:
1.对于这种dp优化,若dp式子中出现变量很少而定量很多,就要考虑到维护定量;
2.而对于dp式子中有max(),min()之类的,说明主动决策决定被动决策;所以考虑维护两个决策中较容易维护的一方;然后让另一方成为被动;若遇到维护的值不再偏向于己方;
那就把这种状态pop掉,转换成另一方;让这种状态继续合法;对答案做贡献;
3.注意2中max的决策单调性;例如这个题中max有单调性,就可以无后效性的转化;
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=;
const int INF=1e9+;
int a[N],b[N],sum[N],dp[N],n,k;
int f[N];
struct node{
int id,val;
bool operator < (const node a) const{
return val>a.val;
}
};
priority_queue<node>q1,q2;
int min(int a,int b){return a<b?a:b;}
int max(int a,int b){return a>b?a:b;}
void work_2(){
memset(f,0x3f,sizeof(f));f[]=;
//q1.push(dp[1]);q2.push(dp[1]+b[1]);
//q1.push((node){0,0}),q2.push((node){0,0});
//q1.push((node){0,INF}),q2.push((node){0,INF});
for(int i=;i<=n;++i){
q1.push((node){i-,f[i-]+b[i-]});
//q2.push((node){i-1,f[i-1]-sum[i-1]});
while(q1.size()){
int x=q1.top().id;
if(x>=i-k) break;
q1.pop();
}//cout<<"L"<<endl;
while(q2.size()){
int h=q2.top().id;
if(h>=i-k) break;
q2.pop();
}
while(q1.size()){
int y=q1.top().val;
int x=q1.top().id;
if(y>f[x]-sum[x]+sum[i]) break;
q1.pop();
q2.push((node){x,f[x]-sum[x]});
}//cout<<"M"<<endl;
while(q1.size()){
int x=q1.top().id;
if(x>=i-k) break;
q1.pop();
}//cout<<"K"<<endl;
while(q2.size()){
int h=q2.top().id;
if(h>=i-k) break;
q2.pop();
}
if(q1.size()) f[i]=min(f[i],q1.top().val);
if(q2.size()) f[i]=min(q2.top().val+sum[i],f[i]);
//f[i]=min(q1.top().val,q2.top().val+sum[i]);
//cout<<f[i]<<endl;
}
cout<<f[n]<<endl;
}
signed main(){
scanf("%lld%lld",&n,&k);
for(int i=;i<=n;++i) {scanf("%lld",&a[i]);sum[i]=sum[i-]+a[i];}
for(int i=;i<n;++i) {scanf("%lld",&b[i]);}
work_2();
}
T3
HZOJ 20190819 NOIP模拟26题解的更多相关文章
- HZOJ 20190818 NOIP模拟24题解
T1 字符串: 裸的卡特兰数题,考拉学长讲过的原题,就是bzoj3907网格那题,而且这题更简单,连高精都不用 结论$C_{n+m}^{n}-C_{n+m}^{n+1}$ 考场上10min切掉 #in ...
- [NOIP模拟26]题解
今天的考试题改自闭了……所以滚来写陈年题解. A.*****贪婪***** RT,出题人告诉我们这题要贪心. 最优的策略一定是拖到必须断的时候再断开(虽然并不知道为什么). 如果一段序列满足题目中的性 ...
- noip模拟26[肾炎黄·酱累黄·换莫黄]
\(noip模拟26\;solutions\) 这个题我做的确实是得心应手,为啥呢,因为前两次考试太难了 T1非常的简单,只不过我忘记了一个定理, T2就是一个小小的线段树,虽然吧我曾经说过我再也不写 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- 「题解」NOIP模拟测试题解乱写II(36)
毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...
- 「题解」NOIP模拟测试题解乱写I(29-31)
NOIP模拟29(B) T1爬山 简单题,赛时找到了$O(1)$查询的规律于是切了. 从倍增LCA那里借鉴了一点东西:先将a.b抬到同一高度,然后再一起往上爬.所用的步数$×2$就是了. 抬升到同一高 ...
- HGOI NOIP模拟4 题解
NOIP国庆模拟赛Day5 题解 T1 马里奥 题目描述 马里奥将要参加 NOIP 了,他现在在一片大陆上,这个大陆上有着许多浮空岛,并且其中一座浮空岛上有一个传送门,马里奥想要到达传送门从而前往 N ...
- [NOIP模拟13]题解
A.矩阵游戏 其实挺水的? 考场上根本没有管出题人的疯狂暗示(诶这出题人有毛病吧这么简单的东西写一大堆柿子),而且推公式能力近乎没有,所以死掉了. 很显然乘法有交换率结合率所以操作顺序对最终结果没什么 ...
- NOIP模拟26
把题解沽了好久了,今天还是不想写,我们靠的B卷其实挺水的,但是我就是想吐槽一下!咋还带题目里面放题解的?题里一点题解的线索都没有,但是玄机竟然在题目里! 我也是醉了,T1就是一个贪心,题目说贪婪,T2 ...
随机推荐
- thinkphp5分页查询paginate()传递参数
使用paginate()分页,我这里实现的是搜索后分页显示,翻页后传递搜索关键字 www.demo.com/home/search/?k=搜索关键字&page=2 搜索分页源码在: think ...
- 在win下开发的项目怎么迁移到linux下面才能正常运行?
我可以直接拷贝项目目录到linux下面直接操作吗? 答案: 可以,咋可能??? 为啥??? win开发直接拷贝过去,你不凉谁凉了,我以前也同样的单纯,如果你项目里用的绝对路径! 那恭喜你,你凉了,清楚 ...
- Spring实战(一)Spring简介---呕心沥血只为让Java开发更简单。
Spring诞生的初衷是为了替代更加重量级的企业级Java技术(EJB). 相对于EJB来说,Spring提供了更加轻量级和简单的编程模型,它增强了POJO(简单老式Java对象)的功能,使简单的Ja ...
- c# 爬虫和组件HtmlAgilityPack处理html
测试当前爬虫的User-Agent:http://www.whatismyuseragent.net/ 大佬的博客地址:https://www.cnblogs.com/jjg0519/p/670274 ...
- [NOIP10.6模拟赛]2.equation题解--DFS序+线段树
题目链接: 咕 闲扯: 终于在集训中敲出正解(虽然与正解不完全相同),开心QAQ 首先比较巧,这题是\(Ebola\)出的一场模拟赛的一道题的树上强化版,当时还口胡出了那题的题解 然而考场上只得了86 ...
- VisualSVN Server 安装
1.去官网下载:https://www.visualsvn.com/server/download/ 2.安装: 修改为后: 3.开机自动启动.
- SSISDB7:当前正在运行的Package及其Executable
PM问:“Vic,现在ETL Job跑到哪一个Package了,正在执行哪个Task?”,第一次遇到这个问题时,一下就懵逼了,只能硬着头皮说:“我看看”. 在做项目开发时,这个问题很常见,但是,被很多 ...
- 8.Spring整合Hibernate_2_声明式的事务管理(Annotation的方式)
声明式的事务管理(AOP的主要用途之一) (Annotation的方式) 1.加入annotation.xsd 2.加入txManager bean 3.<tx:annotation-drive ...
- Delphi 类成员的可见性
- python异步编程 (转载)
Python Async/Await入门指南 转自:https://zhuanlan.zhihu.com/p/27258289 本文将会讲述Python 3.5之后出现的async/await的使 ...