NOI Day2线上同步赛崩盘记
Preface
蒟蒻愉快的NOI线上赛Day2之行,不过因为太菜就凉了
这次由于策略&&网络的问题,最后两题都没有交,结果就靠T1稳住拿了75分就回家了。
我真是太菜了。
屠龙勇士
首先看到那个选取屠龙宝剑的操作,emm...既然是NOI,那我就手写一个平衡树吧
蒟蒻是不知道有个叫multiset的东西的
然后每次查询一个数的后继即可,Treap就很资瓷了。我们把打每一条龙时宝剑的攻击力记为\(d_i\)
然后接下来又到了请出分类讨论大法的时候了:
- \(1\to4\&\&14,15\):这里有一个很送分的性质,\(p_i=1\),也就是说一条龙我把它打到\(0\)血及以下时它就GG了,所以我们直接求\(max(\lceil \frac{a_i}{d_i}\rceil)\)即可
- \(8\to 13\):什么\(n,m=1\),那么我们很容易得出一个同余方程:
\(d_ix\equiv a_i(mod\ p_i)\)
那么我们要求的就是\(x\)的最小正整数解了,这个扩欧解决即可
- \(5\to7\):这几个点的\(n,m\le10^5\)并且满足\(lcm(p_i)≤10^6\),那么我们大力猜结论:此时答案不会超过\(lcm(p_i)≤10^6\)然而是对的,但我并不知道怎么证
于是我们枚举答案然后判断一下即可。
综上即可水得75pts,分类讨论果然是帮助我这种菜鸡水分的最好方法
CODE
#include<cstdio>
#include<cctype>
#include<cstring>
using namespace std;
typedef long long LL;
const LL N=100005,INF=1e9;
LL p[N],atk[N],n,m,rt,tot,ans,x,t,a[N],s[N],k;
bool flag;
struct Treap
{
LL val,dat,size,cnt,ch[2];
}node[N<<1];
inline char tc(void)
{
static char fl[100000],*A=fl,*B=fl;
return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
}
inline void read(LL &x)
{
x=0; char ch; while (!isdigit(ch=tc()));
while (x=(x<<3)+(x<<1)+ch-'0',isdigit(ch=tc()));
}
inline LL gcd(LL m,LL n)
{
return n?gcd(n,m%n):m;
}
inline LL lcm(LL m,LL n)
{
return m/gcd(m,n)*n;
}
inline LL rand()
{
static LL seed=233;
return seed=(LL)seed*482711LL%2147483647;
}
inline void pushup(LL rt)
{
node[rt].size=node[node[rt].ch[0]].size+node[node[rt].ch[1]].size+node[rt].cnt;
}
inline LL build(LL v)
{
node[++tot].val=v; node[tot].dat=rand();
node[tot].size=node[tot].cnt=1; return tot;
}
inline void init(void)
{
tot=rt=ans=0; flag=k=1; memset(node,0,sizeof(node));
rt=build(-INF); node[rt].ch[1]=build(INF); pushup(rt);
}
inline void rotate(LL &rt,LL d)
{
LL temp=node[rt].ch[d^1]; node[rt].ch[d^1]=node[temp].ch[d]; node[temp].ch[d]=rt;
rt=temp; pushup(node[rt].ch[d]); pushup(rt);
}
inline void insert(LL &rt,LL v)
{
if (!rt) { rt=build(v); return; }
if (v==node[rt].val) ++node[rt].cnt; else
{
LL d=v<node[rt].val?0:1; insert(node[rt].ch[d],v);
if (node[node[rt].ch[d]].dat>node[rt].dat) rotate(rt,d^1);
}
pushup(rt);
}
inline void remove(LL &rt,LL v)
{
if (!rt) return;
if (v==node[rt].val)
{
if (node[rt].cnt>1) { --node[rt].cnt; pushup(rt); return; }
if (node[rt].ch[0]||node[rt].ch[1])
{
if (!node[rt].ch[1]||node[node[rt].ch[0]].dat>node[node[rt].ch[1]].dat) rotate(rt,1),remove(node[rt].ch[1],v);
else rotate(rt,0),remove(node[rt].ch[0],v); pushup(rt);
} else rt=0; return;
}
if (v<node[rt].val) remove(node[rt].ch[0],v); else remove(node[rt].ch[1],v); pushup(rt);
}
inline LL get_val(LL &rt,LL rk)
{
if (!rt) return INF;
if (rk<=node[node[rt].ch[0]].size) return get_val(node[rt].ch[0],rk); else
if (rk<=node[node[rt].ch[0]].size+node[rt].cnt) return node[rt].val; else
return get_val(node[rt].ch[1],rk-node[node[rt].ch[0]].size-node[rt].cnt);
}
inline LL get_pre(LL &rt,LL v)
{
LL now=rt,pre;
while (now)
{
if (node[now].val<=v) pre=node[now].val,now=node[now].ch[1];
else now=node[now].ch[0];
}
return pre;
}
inline LL max(LL a,LL b)
{
return a>b?a:b;
}
inline LL exgcd(LL a,LL b,LL &x,LL &y)
{
if (!b) { x=1; y=0; return a; }
LL d=exgcd(b,a%b,y,x); y-=a/b*x; return d;
}
inline bool check(LL x)
{
for (register LL i=1;i<=n;++i)
{
if (a[i]>s[i]*x) return 0;
if ((s[i]*x-a[i])%p[i]) return 0;
} return 1;
}
inline void solve1(void)
{
register LL i;
for (i=1;i<=n;++i) ans=max(ans,(a[i]-1)/s[i]+1);
printf("%lld\n",ans);
}
inline void solve2(void)
{
LL A=s[1],B=p[1],C=a[1],x,y,D=exgcd(A,B,x,y);
if (C%D) { puts("-1"); return; } x*=C/D; LL r=B/D;
printf("%lld\n",(x%r+r)%r);
}
inline void solve3(void)
{
for (register LL i=1;i<=k;++i)
if (check(i)) { printf("%lld\n",i); return; }
puts("-1");
}
int main()
{
//freopen("dragon.in","r",stdin); freopen("dragon.out","w",stdout);
register LL i; read(t);
while (t--)
{
read(n); read(m); init();
for (i=1;i<=n;++i) read(a[i]);
for (i=1;i<=n;++i) read(p[i]),flag=flag&&(p[i]==1),k=lcm(k,p[i]);
for (i=1;i<=n;++i) read(atk[i]);
for (i=1;i<=m;++i) read(x),insert(rt,x);
for (i=1;i<=n;++i)
{
LL now=get_pre(rt,a[i]); if (now==-INF) now=get_val(rt,2);
s[i]=now; remove(rt,now); insert(rt,atk[i]);
}
if (flag) solve1(); else if (n==1&&m==1) solve2(); else solve3();
}
return 0;
}
情报中心
一道十分可怕的神仙题,反正我是准备写暴力+链的特判的
但是链的情况比较烦,导致最后暴力都来不及写了
缅怀陈潇然dalao因为网络没有交上去
多边形
吉利的神仙题系列反正我都不会
为什么这种毒瘤题都是让我看了一眼就连暴力都不想写了。
Postscript
Day2尽管翻车了但也翻盘(雾)了,莫名在EZ两天水了Rank2
大佬们不要让我啊
NOI Day2线上同步赛崩盘记的更多相关文章
- NOI Day1线上同步赛梦游记
Preface 第一次体验NOI,虽然不是正式选手,但是打打同步赛还是挺涨姿势的,也算是体验了一把. Day1很爆炸,一方面是NOI题目的难度高于自身的水平,另一方面也出现了比较大的失误,T1一个数组 ...
- NOI2020 同步赛划水记
因为太菜了没去现场参加 NOI 就算去了估计也只能混个Fe(雾) "两天都会各有一道签到题,争取拿到70分.剩下的题每道题打30分暴力.每天130分,就能稳拿Ag了."--ls D ...
- 设置 svn 与 web线上同步
默认你已经配置好了svn服务 1.假设我们的线上网站目录为:/data/www/xxx 2.假设svn的仓库目录为:/data/svn/repo 一.checkout一份svn到线上网站目录 svn ...
- 【NOI 2019】同步赛 / 题解 / 感想
非常颓写不动题怎么办…… 写下这篇博客警示自己吧…… 游记 7.16 我并不在广二参加 NOI,而是在距离广二体育馆一公里远的包间打同步赛(其实就是给写不动题找个理由) 上午身体不舒服,鸽了半天才看题 ...
- NOI 2018网络同步赛(游记?)
刚中考完那段时间比较无聊,报名了一个同步赛,报完名才发现成绩单是要挂到网上的,而且因为报的早给了一个很靠前的考号...那布星啊,赶紧学点东西,于是在一周内学了网络流,Treap以及一些数论. Day1 ...
- rsync实现负载均衡集群文件同步,搭建线上测试部署环境
闲来无事,搭建一个负载均衡集群,至于负载均衡集群搭建过程,找时间写下.这次主要写集群之间的文件同步,以及线上测试环境的搭建. 笔者看过很多公司都没有线上测试环境,真是崩溃了,不造怎么确保线上线下环境一 ...
- 使用percona-xtrabackup实现对线上zabbix监控系统数据库mariadb5.5.47的主从同步
使用percona-xtrabackup实现对线上zabbix监控系统数据库的主从同步 业务背景: zabbix3.0.4是业务的主要监控,部署在一台单机中,为避免数据丢失先对其做数据主从同步,因主数 ...
- Git版本控制,rsync同步文件,完成线上部署
之前项目开发完成,测试阶段,借着此时,由于公司暂时用两台aliyun ecs 做业务层,所以每次都需要同步线上文件,进而想着搞一搞服务器端(小公司,新项目,先小搞一把),搭建一套小的版本控制上线的 ...
- 记一次线上coredump事故
1.事故背景 上周三凌晨,我负责的某个模块在多台机器上连续发生coredump,幸好发生在业务低峰期,而且该模块提供的功能也不是核心流程功能,所以对线上业务影响比较小.发生coredump后,运维收到 ...
随机推荐
- Android事件总线(二)EventBus3.0源码解析
1.构造函数 当我们要调用EventBus的功能时,比如注册或者发送事件,总会调用EventBus.getDefault()来获取EventBus实例: public static EventBus ...
- python第六十六天--sqlalchemy
#!usr/bin/env python #-*-coding:utf-8-*- # Author calmyan #python #2017/7/6 21:29 #__author__='Admin ...
- json数据 二级联动
<head> <link href="static/bootstrap-3.3.5-dist/css/bootstrap.css" rel="style ...
- linux E325: 注意 发现交换文件 "*.swp" 解决方法
今天在linux里修改脚本文件时,不小心非正常关闭了脚本文件,再次编辑时,每次都提示 如下错误: E325: 注意发现交换文件 ".bqh.sh.swp" 所有者: root 日期 ...
- 辽宁移动宽带体验及魔百盒M101s-2刷机
一.背景 坐标:辽宁 某城,移动宽带100M. 设备:移动赠送,华为光猫一只,魔百盒M101s-2电视盒子 一只,据安装人员说这个魔百盒是移动自己开发设计的. 二.上网体验 上网:浏览一般网站没问题. ...
- python遍历本地文件系统 按文件大小排序
在这个例子中,主要会用到python内置的和OS模块的几个函数: os.walk() : 该方法用来遍历指定的文件目录,返回一个三元tuple(dirpath, dirnames, filenames ...
- linux网关设置
1.linux中eth0为外网ip.外网网关.外网DNS设置,eth1为内网ip”172.22.0.0/16“不设置网关.DNS. 2.启动linux内核中的IP转发功能 执行vim命令编辑sysct ...
- TG可能会用到的动态规划-简易自学
最新更新 完整校订版见此 戳我阅读 以下为未核对不完整版本. 因版权原因,完整精校版不向所有公众开放. 请从您找到本博客的地址查找附带密码(比如简书分享了本网址,请您从简书分享页底部查询密码),感谢您 ...
- JavaScript中遍历数组和对象的方法
js数组遍历和对象遍历 针对js各种遍历作一个总结分析,从类型用处,分析数组和对象各种遍历使用场景,优缺点等 JS数组遍历: 1,普通for循环,经常用的数组遍历 var arr = [1,2,0,3 ...
- 组件的三大属性state,props,refs与事件处理
组件的三大属性state state是组件对象最重要的属性, 值是对象(可以包含多个数据),组件被称为"状态机", 通过更新组件的state来更新对应的页面显示(重新渲染组件) 初 ...