[考试总结]noip模拟16
达成成就,一天更3篇总结。
又是一个暴力场
别问我为什么开局 \(5\) 分钟就问老师为什么 \(T3\) 没有提交的窗口。
开题读题,一路自闭到 \(T3\) ,发现 \(T3\) 可打暴力,所以一波暴力打上去,开始只有 \(30pts\)
然后转向 \(T2\) ,发现也有部分分数可以打,所以就开始打这个题目的暴力。
瞄准 \(20pts\) 部分分数,然后疯狂开始打。
打完之后也不能放弃啊,所以开始回去开 \(T1\),然后开始自闭。
给的样例手摸都出不来。。。。
自闭\(*2\)
突然思路开始涌现,发现可以把坐标系分成 \(1000\) * \(1000\),然后开始一个一个点枚举,这样的话就能骗过\(Special\;Judge\)
然后开始打。。。
然后样例都调不出来。。。
自闭\(*3\)
但是经过我的奋战,\(T1\) 终于出来了样例。。。
然后转向 \(T3\),感觉数组好像开的有点小,但是部分分数似乎也够,但还好我开打了一些。又赚了 \(20pts\)
不扯淡了
T1:
首先考虑的应该是二分做法。
然后如果打对就可以得到 \(80pts\)
然而只有土哥打对了。。。。
战神看出了正解最小生成树,然而 \(Kruskal\) 爆炸了。。。
然而还是极其强大。。。
正解就是最小生成树,然后 \(Kruskal\) 也可以过。
就是每个点连边,然后和上下边界连边。
#include<bits/stdc++.h>
using std::cout; using std::endl;
#define debug cout<<"debug"<<endl
//#define int long long
namespace xin_io
{
#define gc() p1 == p2 and (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin),p1 == p2) ? EOF : *p1++
#define scanf eat1 = scanf
#define freopen eat2 = freopen
int eat1; FILE *eat2; char buf[1<<20],*p1 = buf,*p2 = buf;
inline void openfile() {freopen("t.txt","r",stdin);} inline void outfile() {freopen("o.txt","w",stdout);}
template<class type>inline type get()
{
type s = 0,f = 1; register char ch = gc();
while(!isdigit(ch)) {if(ch == '-') f = -1; ch = gc();}
while(isdigit(ch)) {s = s * 10 + ch - '0'; ch = gc();}
return s * f;
}
}
using namespace xin_io; static const int maxn = 1e6+10,inf = 0x7f7f7f,mod = (1<<30);
#define try(i,a,b) for(register signed i=a;i<=b;++i)
#define throw(i,a,b) for(register signed i=a;i>=b;--i)
typedef long long ll;
namespace xin
{
const double eps = 1e-8;
int n,m,k;
class xin_data{public:int x,y;}d[maxn];
inline double getdis(double x1,double y1,double x2,double y2)
{return std::sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));}
inline bool equal(double x,double y)
{
if(abs(x - y) <= eps) return true;
return false;
}
int x[maxn],y[maxn];
double dis[maxn];
bool vis[maxn];
double ans = -inf * 1.0;
inline short main()
{
#ifndef ONLINE_JUDGE
openfile();
#endif
n = get<signed>(); m = get<signed>(); k = get<signed>();
try(i,1,k) x[i] = get<signed>(),y[i] = get<signed>(),dis[i] = (double)(m - y[i]);
dis[k+1] = m; dis[0] = inf * 1.0;
while(true)
{
register int temp = 0;
try(i,1,k+1)if(!vis[i] and dis[i] < dis[temp]) temp = i;
vis[temp] = true;
ans = std::max(ans,dis[temp]);
if(temp == k + 1) break;
try(i,1,k) dis[i] = std::min(dis[i],getdis(x[i],y[i],x[temp],y[temp]));
dis[k+1] = std::min(dis[k+1],y[temp] * 1.0);
}
printf("%0.9lf\n",ans/2.0);
return 0;
}
}
signed main() {return xin::main();}
T2:
要找一个极长上升序列。
然后线段树优化。。。。
老猥琐了。。
自己研究吧。。。
#include<bits/stdc++.h>
using std::cout; using std::endl;
#define debug cout<<"debug"<<endl
//#define int long long
namespace xin_io
{
#define gc() p1 == p2 and (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin),p1 == p2) ? EOF : *p1++
#define scanf eat1 = scanf
#define freopen eat2 = freopen
int eat1; FILE *eat2; char buf[1<<20],*p1 = buf,*p2 = buf;
inline void openfile() {freopen("t.txt","r",stdin);} inline void outfile() {freopen("o.txt","w",stdout);}
template<class type>inline type get()
{
type s = 0,f = 1; register char ch = gc();
while(!isdigit(ch)) {if(ch == '-') f = -1; ch = gc();}
while(isdigit(ch)) {s = s * 10 + ch - '0'; ch = gc();}
return s * f;
}
}
using namespace xin_io; static const int maxn = 1e6+10,inf = 0x7f7f7f7f,mod = (1<<30);
#define try(i,a,b) for(register signed i=a;i<=b;++i)
#define throw(i,a,b) for(register signed i=a;i>=b;--i)
typedef long long ll;
namespace xin
{
int p[maxn],c[maxn];
int n;
int f[maxn];
int maxx = 0;
class xin_segment
{
private:
#define ls(fa) (fa << 1)
#define rs(fa) (fa << 1 | 1)
inline void up(int fa,int l,int r,int x)
{
register int mid = l + r >> 1;
t[fa].mf = find(ls(fa),l,mid,l,mid,t[rs(fa)].mx);
t[fa].f = std::min(t[ls(fa)].f,t[rs(fa)].f);
t[fa].mx = std::max(t[ls(fa)].mx,t[rs(fa)].mx);
// cout<<"t[fa].mx = "<<t[fa].mx<<endl;
}
public:
class xin_tree{public:int mx,mf,f;}t[maxn];
int find(int fa,int l,int r,int ql,int qr,int p)
{
if(t[fa].mx < p) return inf;
if(l == r) {maxx = std::max(maxx,t[fa].mx); return t[fa].f;}
register int mid = l + r >> 1;
if(l == ql and r == qr)
{
if(t[rs(fa)].mx < p) return find(ls(fa),l,mid,ql,mid,p); maxx = std::max(maxx,t[fa].mx); //cout<<"maxx = "<<maxx<<endl;
return std::min(t[fa].mf,find(rs(fa),mid+1,r,mid+1,qr,p));
}
if(qr <= mid) return find(ls(fa),l,mid,ql,qr,p);
else if(ql > mid) return find(rs(fa),mid+1,r,ql,qr,p);
else {maxx = 0; register int temp = find(rs(fa),mid+1,r,mid+1,qr,p);return std::min(temp,find(ls(fa),l,mid,ql,mid,maxx));}
}
void insert(int fa,int l,int r,int x,int p)
{
if(x > r or x < l) return ;
if(l == r) {t[fa].f = f[p]; t[fa].mx = p; return;}
register int mid = l + r >> 1;
insert(ls(fa),l,mid,x,p); insert(rs(fa),mid+1,r,x,p);
up(fa,l,r,x);
}
}t;
inline short main()
{
#ifndef ONLINE_JUDGE
openfile();
#endif
n = get<signed>();
try(i,1,n) p[i] = get<signed>();
try(i,1,n) c[i] = get<signed>();
try(i,1,(n<<2)) t.t[i].f = t.t[i].mf = inf;
for(register int i=1;i<=(n<<2);i<<=1) t.t[i].f = t.t[i].mf = 0;
try(i,1,n)
{
f[i] = t.find(1,0,n,0,p[i] - 1,0) + c[i];
t.insert(1,0,n,p[i],i);
}
register int ans = inf,temp = 0;
throw(i,n,1) if(temp < p[i]) temp = p[i],ans = std::min(ans,f[i]);
cout<<ans<<endl;
return 0;
}
}
signed main() {return xin::main();}
T3:
咱们把式子变换一下
然后发现:
\]
然后就是一个斜率式子。
然后维护凸包,找到斜率最大的。
采用倍增的方法,然后飞快。
防止黑心出题人
#include<bits/stdc++.h>
using std::cout; using std::endl;
#define debug cout<<"debug"<<endl
//#define int long long
namespace xin_io
{
#define gc() p1 == p2 and (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin),p1 == p2) ? EOF : *p1++
#define scanf eat1 = scanf
#define freopen eat2 = freopen
int eat1; FILE *eat2; char buf[1<<20],*p1 = buf,*p2 = buf;
inline void openfile() {freopen("t.txt","r",stdin);} inline void outfile() {freopen("o.txt","w",stdout);}
template<class type>inline type get()
{
type s = 0,f = 1; register char ch = gc();
while(!isdigit(ch)) {if(ch == '-') f = -1; ch = gc();}
while(isdigit(ch)) {s = s * 10 + ch - '0'; ch = gc();}
return s * f;
}
}
using namespace xin_io; static const int maxn = 1e6+10,inf = 0x7f7f7f,mod = (1<<30);
#define try(i,a,b) for(register signed i=a;i<=b;++i)
#define throw(i,a,b) for(register signed i=a;i>=b;--i)
typedef long long ll;
namespace xin
{
class xin_edge{public:int next,ver;}edge[maxn];
int d[maxn],fa[maxn][31],ans[maxn],c[maxn],n;
int head[maxn],zhi = 0;
inline void add(int x,int y) {edge[++zhi].ver = y; edge[zhi].next = head[x]; head[x] = zhi;}
inline double getk(int x,int y) {return (double)(c[x] - c[y]) / (double)(d[y] - d[x]);}
void dfs(int x)
{
register int now = fa[x][0];
throw(i,30,0)
{
if(fa[now][i] <= 1) continue;
if(getk(x,fa[now][i]) >= getk(x,fa[fa[now][i]][0])) now = fa[fa[now][i]][0]; //just jump to the best
}
if(now > 1 and getk(x,now) >= getk(x,fa[now][0])) now = fa[now][0];
ans[x] = now; fa[x][0] = now; //this method is not totally the same as before,f[x][0] is its best answer but not his father
try(i,1,30) fa[x][i] = fa[fa[x][i-1]][i-1];
for(register int i=head[x];i;i=edge[i].next)
{
register int y = edge[i].ver;
d[y] = d[x] + 1; dfs(y);
}
}
inline short main()
{
#ifndef ONLINE_JUDGE
openfile();
#endif
n = get<signed>();
try(i,1,n) c[i] = get<signed>();
try(i,2,n)
{
fa[i][0] = get<signed>();
add(fa[i][0],i);
}
d[1] = 1;
dfs(1);
try(i,2,n) printf("%.10lf\n",getk(i,ans[i]));
return 0;
}
}
signed main() {return xin::main();}
[考试总结]noip模拟16的更多相关文章
- 2021.7.15考试总结[NOIP模拟16]
ZJ模拟D2就是NB.. T1 Star Way To Heaven 谁能想到这竟是个最小生成树呢?(T1挂分100的高人JYF就在我身边 把上边界和下边界看成一个点和星星跑最小生成树,从上边界开始跑 ...
- 7.15考试总结(NOIP模拟16)[Star Way To Heaven·God Knows·Lost My Music]
败者死于绝望,胜者死于渴望. 前言 一看这个题就来者不善,对于第一题第一眼以为是一个大模拟,没想到是最小生成树. 对于第二题,先是看到了状压可以搞到的 20pts 然后对着暴力一顿猛调后来发现是题面理 ...
- 6.17考试总结(NOIP模拟8)[星际旅行·砍树·超级树·求和]
6.17考试总结(NOIP模拟8) 背景 考得不咋样,有一个非常遗憾的地方:最后一题少取膜了,\(100pts->40pts\),改了这么多年的错还是头一回看见以下的情景... T1星际旅行 前 ...
- 5.23考试总结(NOIP模拟2)
5.23考试总结(NOIP模拟2) 洛谷题单 看第一题第一眼,不好打呀;看第一题样例又一眼,诶,我直接一手小阶乘走人 然后就急忙去干T2T3了 后来考完一看,只有\(T1\)骗到了\(15pts\)[ ...
- 5.22考试总结(NOIP模拟1)
5.22考试总结(NOIP模拟1) 改题记录 T1 序列 题解 暴力思路很好想,分数也很好想\(QAQ\) (反正我只拿了5pts) 正解的话: 先用欧拉筛把1-n的素数筛出来 void get_Pr ...
- 2021.9.17考试总结[NOIP模拟55]
有的考试表面上自称NOIP模拟,背地里却是绍兴一中NOI模拟 吓得我直接文件打错 T1 Skip 设状态$f_i$为最后一次选$i$在$i$时的最优解.有$f_i=max_{j<i}[f_j+a ...
- [考试总结]noip模拟23
因为考试过多,所以学校的博客就暂时咕掉了,放到家里来写 不过话说,vscode的markdown编辑器还是真的很好用 先把 \(noip\) 模拟 \(23\) 的总结写了吧.. 俗话说:" ...
- 2021.7.29考试总结[NOIP模拟27]
T1 牛半仙的妹子图 做法挺多的,可以最小生成树或者最短路,复杂度O(cq),c是颜色数. 我考场上想到了原来做过的一道题影子,就用了并查集,把边权排序后一个个插入,记录权值的前缀和,复杂度mlogm ...
- 2021.8.16考试总结[NOIP模拟41]
T1 你相信引力吗 肯定是单调栈维护.但存在重复值,还是个环,不好搞. 发现取区间时不会越过最大值,因此以最大值为断点将环断为序列.在栈里维护当前栈中有多少个与当前元素相等的元素,小分类讨论一下. 最 ...
随机推荐
- powerDisigner使用
最近要忙期考,但还是决定每天抽点空来写CodeSmith的系列文章了,在此实在不敢用教程这个词语,毕竟自己对CodeSmith了解的也不是很多,有很多牛人都在博客园发布了不少关于CodeSmith ...
- Centos7 安装 Cacti 1.2
1. 安装web server(略) 注意系统时间/时区 ntp server是否定时同步 2. 安装 mysql 5.7 (略) 安装成功后 2.1 编辑 my.ini 文件在 [mysqld] 下 ...
- cisco交换机端口从errdisable状态恢复
故障描述 经用户反馈,一台cisco2960x接入交换机的一个端口插网线不通,ip电话也没有poe供电. 排查过程 查看交换机端口状态,发现变成了errdisable: ZH_HQN_SW2960X_ ...
- 65.QT-UDP组播实现多人共享桌面(同时支持收发显示)
这里我们只是简单学习下通过udp组播如何共享桌面demo.帧率上面比较低,毕竟没有用推流,只是简单的将图片发送到组播地址,而加入组播地址的客户端去取数据显示而已. 主要是为了学习UDP知识而写的,真的 ...
- Spring WebFlux 教程:如何构建反应式 Web 应用程序
Spring WebFlux 教程:如何构建反应式 Web 应用程序 反应式系统提供了我们在高数据流世界中所需的无与伦比的响应能力和可扩展性.然而,反应式系统需要经过专门培训的工具和开发人员来实现这些 ...
- Arduino参考手册-函数和变量及电路图
标题: Arduino参考手册-函数和变量及电路图 作者: 梦幻之心星 sky-seeker@qq.com 标签: [#Arduino,#参考手册,#函数,#变量] 目录: [Arduino] 日期: ...
- 手写Spring,定义标记类型Aware接口,实现感知容器对象
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 同事写的代码,我竟丝毫看不懂! 大佬的代码,就像 "赖蛤蟆泡青蛙,张的丑玩 ...
- linux 下安装 docker 环境
一分钟了解 Docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然 ...
- gitlab hostname修改
cd /var/opt/gitlab/gitlab-rails/etc vim gitlab.yml /home/git/gitlab/config/gitlab.yml production: &a ...
- Spring Cloud中,如何解决Feign/Ribbon第一次请求失败的问题?
Spring Cloud中,如何解决Feign/Ribbon第一次请求失败的问题? Spring Cloud中,Feign和Ribbon在整合了Hystrix后,可能会出现首次调用失败的问题,要如何解 ...