day1
t1的结论貌似在哪见过,自己稍微验证了一下貌似没记错就没有管了。
t2一道很好(keng)的模拟题啊
t3自己做题好慢啊,想出来dp打上去最后几分钟才过了大样例,我写的是记忆化搜索,判-1很好判,没时间加上去了可惜了,不过还是自己做题太慢了。然后由于没拍,不确定自己dp对不对,就特判了k=0粘了一个暴力,没想到暴力错了,70变成50...基础不扎实gg

100+100+50=250  好菜啊t3没A掉

day2
t1看完题就开始打,没注意算距离时减一下就变成两倍了会爆long long,但好像数据中z都>=0 ??
t2写完搜索后发现好像可以把所有点深度变成一个n进制数,可以记忆化,不过打完发现n=12要跑10s+,果断删掉换成爆搜。并没有想到如何状压...
t3打完前50分后有一个想法,打完后发现自己想的是错的,于是老老实实写x=1的30分,但耗费了好多时间,没时间打出个数据结构了,于是用了vector,还以为vector有多快,CCF的老爷机上1e5都跑不过,于是t3就挂了,暴力分都没拿全。

100+70+50=220 太菜了...

自己做较难题不行,另外noip中还犯了很多知识性错误,主要原因是学的不扎实,接下来的比赛加油吧。

题解

day1

t1 答案就是x*y-x-y,证明可以见usaco4.1麦香牛块的题解。貌似此题坑到了我校不少选手。

t2 细心模拟即可。

t3 设f(i,j)表示到i点从1~i距离为dis[i]+j的路径个数。对于边u->v,有dis[v]+jv=dis[u]+ju+w(u,v),所以$f(v,j_v)=\sum_{u->v}f(u,dis[v]-dis[u]-w(u,v)-j_v)$,具体实现可以建出反图记忆化搜索,答案为-1当且仅当同一状态在dfs栈中出现了两次。

day2

t1 建图后bfs判联通。

t2 f1(i,s)表示点i到集合s中点的最小权值,这个可以O(n^2*2^n)处理出。 f2(s1,s2)表示集合s2与s1相连花费的最小代价,O(n*3^n)处理。

f(i,s)表示已经确定了深度<=i的点,且这些点的集合为s,将来要付出的最小代价,枚举下一层选哪些点,f(i,s)=min{ f(i+1,s|s')+f2(s,s') },虽然s‘可能会连向深度<i的点,但如果这样转移了答案会变大,而且如果真要这样连,之前就会转移了的,所以不会计算出错的答案也不会漏掉最优解,这一部分复杂度是O(n*3^n)的。

t3 x=1可以用线段树完成,只需记当前区间未被删除的点的个数,删除第k个数直接查到删去即可,插入同理。

对于一般情况可以对每一排的前m-1个元素建出线段树,然后对最后一列再建出线段树,操作和x=1是一样的,但发现空间开不下,因为这n+1棵线段树最开始叶子节点是等差数列,所以动态开点即可。

附d2t3代码(巨难看)

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#include<cmath>
#define P puts("lala")
#define cp cerr<<"lala"<<endl
#define pb push_back
#define fi first
#define se second
#define mkp make_pair
#define ln putchar('\n')
using namespace std;
typedef pair<int,int> pii;
inline void read(int &re)
{
char ch=getchar();int g=1;
while(ch<'0'||ch>'9') {if(ch=='-')g=-1;ch=getchar();}
re=0;
while(ch<='9'&&ch>='0') re=(re<<1)+(re<<3)+ch-48,ch=getchar();
re*=g;
}
typedef long long ll;
inline void read(ll &re)
{
char ch=getchar();ll g=1;
while(ch<'0'||ch>'9') {if(ch=='-')g=-1;ch=getchar();}
re=0;
while(ch<='9'&&ch>='0') re=(re<<1)+(re<<3)+ch-48,ch=getchar();
re*=g;
} const int N=300050;
int n,m,q;
int rt[N],ch[N*80][2],siz[N*80],sz=0;
ll val[N*80]; ll kth_las(int o,int l,int r,int k)
{
if(l==r) {return val[o];}
int mid=l+r>>1;
if(!ch[o][0])
{
ch[o][0]=++sz;ch[o][1]=++sz;
siz[ch[o][0]]=(siz[o]+1)>>1; siz[ch[o][1]]=siz[o]>>1;
if(l==mid) val[ch[o][0]]=(ll)l*m;
if(mid+1==r) val[ch[o][1]]=(ll)r*m;
}
if(k<=siz[ch[o][0]]) return kth_las(ch[o][0],l,mid,k);
else return kth_las(ch[o][1],mid+1,r,k-siz[ch[o][0]]);
} ll kth(int o,int l,int r,int k,int wh)
{
if(l==r) {return val[o];}
int mid=l+r>>1;
if(!ch[o][0])
{
ch[o][0]=++sz;ch[o][1]=++sz;
siz[ch[o][0]]=(siz[o]+1)>>1; siz[ch[o][1]]=siz[o]>>1;
if(l==mid) val[ch[o][0]]=(ll)(wh-1ll)*m+l;
if(mid+1==r) val[ch[o][1]]=(ll)(wh-1ll)*m+r;
}
if(k<=siz[ch[o][0]]) return kth(ch[o][0],l,mid,k,wh);
else return kth(ch[o][1],mid+1,r,k-siz[ch[o][0]],wh);
} void del(int o,int l,int r,int k)
{
if(l==r) {siz[o]=0;val[o]=0;return ;}
int mid=l+r>>1;
if(k<=siz[ch[o][0]]) del(ch[o][0],l,mid,k);
else del(ch[o][1],mid+1,r,k-siz[ch[o][0]]);
siz[o]=siz[ch[o][0]]+siz[ch[o][1]];
} void ins_las(int o,int l,int r,int x,ll k)
{
if(l==r) {siz[o]=1;val[o]=k;return ;}
int mid=l+r>>1;
if(!ch[o][0])
{
ch[o][0]=++sz;ch[o][1]=++sz;
siz[ch[o][0]]=(siz[o]+1)>>1; siz[ch[o][1]]=siz[o]>>1;
if(l==mid) val[ch[o][0]]=(ll)l*m;
if(mid+1==r) val[ch[o][1]]=(ll)r*m;
}
if(x<=siz[ch[o][0]]) ins_las(ch[o][0],l,mid,x,k);
else ins_las(ch[o][1],mid+1,r,x-siz[ch[o][0]],k);
siz[o]=siz[ch[o][0]]+siz[ch[o][1]];
} void ins(int o,int l,int r,int x,ll k,int wh)
{
if(l==r) {siz[o]=1;val[o]=k;return ;}
int mid=l+r>>1;
if(!ch[o][0])
{
ch[o][0]=++sz;ch[o][1]=++sz;
siz[ch[o][0]]=(siz[o]+1)>>1; siz[ch[o][1]]=siz[o]>>1;
if(l==mid) val[ch[o][0]]=(ll)(wh-1ll)*m+l;
if(mid+1==r) val[ch[o][1]]=(ll)(wh-1ll)*m+r;
}
if(x<=siz[ch[o][0]]) ins(ch[o][0],l,mid,x,k,wh);
else ins(ch[o][1],mid+1,r,x-siz[ch[o][0]],k,wh);
siz[o]=siz[ch[o][0]]+siz[ch[o][1]];
} void wj()
{
freopen("phalanx.in","r",stdin);
freopen("phalanx.out","w",stdout);
}
int main()
{
wj();
int i,j,opt,T;
read(n);read(m);read(q);
for(i=1;i<=n;++i)
{
rt[i]=++sz;siz[rt[i]]=m-1+q;
ch[rt[i]][0]=++sz; ch[rt[i]][1]=++sz;
siz[ch[rt[i]][0]]=(siz[rt[i]]+1)>>1; siz[ch[rt[i]][1]]=siz[rt[i]]>>1;
} rt[n+1]=++sz;siz[rt[n+1]]=n+q;
ch[rt[n+1]][0]=++sz; ch[rt[n+1]][1]=++sz;
siz[ch[rt[n+1]][0]]=(siz[rt[n+1]]+1)>>1; siz[ch[rt[n+1]][1]]=siz[rt[n+1]]>>1; for(int cas=1;cas<=q;++cas)
{
int x,y;read(x);read(y);
if(y==m)
{
ll o=kth_las(rt[n+1],1,n+q,x);
del(rt[n+1],1,n+q,x);
printf("%lld\n",o);
ins_las(rt[n+1],1,n+q,n,o);
}
else
{
ll o=kth(rt[x],1,m-1+q,y,x);
del(rt[x],1,m-1+q,y);
printf("%lld\n",o);//get (x,y) ll las=kth_las(rt[n+1],1,n+q,x);//get the last element and push it to the xth row
ins(rt[x],1,m-1+q,m-1,las,x); del(rt[n+1],1,n+q,x);//push o to the last column
ins_las(rt[n+1],1,n+q,n,o);
}
}
return 0;
}

NOIP2017总结 & 题解的更多相关文章

  1. NOIP2017 列队 题解报告【56行线段树】

    题目描述 Sylvia 是一个热爱学习的女♂孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有n \times mn×m名学生,方阵的行数 ...

  2. NOIP2017 宝藏 题解报告【状压dp】

    题目描述 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋, 也给出了这 n 个宝藏屋之间可供开发的 m 条道路和它们的长度. 小明决心亲自前往挖掘所有宝藏屋中的宝藏.但是 ...

  3. [NOIp2017]宝藏 题解

    非常巧妙的 \(O(n^23^n)\) 做法. 题目的本质是要求一棵生成树,使得其每条边的长度与这条边的起点深度乘积的和最小. 我们使用状压 DP,考虑到当前状态与已经打通的点和深度有关,不妨设 \( ...

  4. noip2017普及题解

    https://www.luogu.org/problemnew/show/3954 https://www.luogu.org/problemnew/show/3955 https://www.lu ...

  5. NOIP2017 D2T3 题解

    题面 这种数据范围不是乱搞dfs就是乱搞状压DP 首先应该通过任一方式求出a和b的值: 任意一条抛物线只用两头猪就可以确定,所以我们N^2枚举,并把在这两头猪的抛物线上的猪都存进状态state[i][ ...

  6. noip2017简要题解。

    重新写了一下去年的题来看看自己到底是有多傻逼. 小凯的疑惑 打表. 时间复杂度 搞了一大坨题面,但是真正有用的信息只有几个: 判断他给你的复杂度是多少. 判断当前循环进不进的去. 判断当前循环产生的贡 ...

  7. Noip2018退役记。

    下面是边考试边写的严肃版退役记\(:D\) Day0 其实我本来想取个这个名字:\(NOIP2018\)提高组复赛试题解析 但是这个博客自己求生欲望太强自己改名了. 先占个坑. noip考前毒奶 \( ...

  8. 【NOIP题解】NOIP2017 TG D2T3 列队

    列队,NOIP2017 TG D2T3. 树状数组经典题. 题目链接:洛谷. 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. ...

  9. noip2017爆炸记——题解&总结&反省(普及组+提高组)

    相关链接: noip2018总结 noip2017是我见过的有史以来最坑爹的一场考试了. 今年北京市考点有一个是我们学校,我还恰好被分到了自己学校(还是自己天天上课的那个教室),于是我同时报了普及提高 ...

随机推荐

  1. WPF 截图控件之文字(七)「仿微信」

    前言 接着上周写的截图控件继续更新添加 文字. 1.WPF实现截屏「仿微信」 2.WPF 实现截屏控件之移动(二)「仿微信」 3.WPF 截图控件之伸缩(三) 「仿微信」 4.WPF 截图控件之绘制方 ...

  2. 关于KeyFile的破解,含注册机源代码

    程序来自于<加密与解密3>的第五章的PacMe.exe.书中并没有给出C语言实现的加密与解密代码,自己花了一些时间,把代码还原了,并且写了一个C语言的注册机. 加密原理:正如书中所说,此程 ...

  3. 从 React 原理来看 ahooks 是怎么解决 React 的闭包问题的?

    本文是深入浅出 ahooks 源码系列文章的第三篇,该系列已整理成文档-地址.觉得还不错,给个 star 支持一下哈,Thanks. 本文来探索一下 ahooks 是怎么解决 React 的闭包问题的 ...

  4. CLIP:多模态领域革命者

    CLIP:多模态领域革命者 当前的内容是梳理<Transformer视觉系列遨游>系列过程中引申出来的.目前最近在AI作画这个领域 Transformer 火的一塌糊涂,AI画画效果从18 ...

  5. (四连测)滑雪场的高度差题解---二分 + 搜索---DD(XYX)​​​​​​​的博客

    滑雪场的高度差 时间限制: 1 Sec  内存限制: 128 MB 题目描述 滑雪场可以看成M x N的网格状山地(1 <= M,N <= 500),每个网格是一个近似的平面,具有水平高度 ...

  6. 【java】学习路径18-Arrays中的sort、binarySearch使用注意

    在使用Arrays.binarySearch()的时候要注意先对数组进行排序. Arrays.binarySearch()方法介绍: Searches the specified array of i ...

  7. 游标长时间open导致表无法vacuum问题

    一.问题描述 用户在实际中可能会碰到类似以下 dead rows 无法 vacuum的问题,一个可能的原因是由于游标未结束的原因. test=# vacuum(verbose) t1; INFO: v ...

  8. 采云链SRM SaaS供应商管理系统,发展型中小企业的福音

    采购业务的发展遵循一些规律:采购从一开始围绕"供应商"开展,逐渐发展成围绕"货物"进行,如今围绕"供应商协同"和"采购流程管理&q ...

  9. C#/VB.NET 如何在Excel中使用条件格式设置交替行颜色

    说起高亮数据行,不让人想起了交替颜色行,有的人把交替颜色行也都设置成高亮,不仅不美观,而且对阅读还是个干扰.隔行交替的颜色是为了阅读不串行,这些行只是环境,数据才是主体.那么如何通过C#/VB.NET ...

  10. 关于“No loop matching the specified signature and casting was found for ufunc lstsq_n”问题的解决

    下面这段代码是使用MatPlotLib绘制数据随时间变化的趋势. import datetime as dt import numpy as np import pandas as pd import ...