EZ 2018 06 10 NOIP2018 模拟赛(十八)
好久没写blog&&比赛题解了,最近补一下
这次还是很狗的,T3想了很久最后竟然连并查集都忘写了,然后T2map莫名爆炸。
Rating爆减。。。。。。链接不解释
好了我们开始看题。
A. 「THUPC 2017」玩游戏
看到这个题目是不是超级害怕蒟蒻看到THUPC瑟瑟发抖
然后我们仔细读一遍题,发现签到题get!
我们首先判断\(a+b\)是否可以表示为\(\sum_{i=1}^k i\)的形式
如果可以,我们就可以不断从\(k\)开始,如果\(a>=k\)那么就\(a-=k\)。这样可以保证正确性。
由于\(k=\sqrt{a+b}\),因此不会超时也不需要任何优化。
CODE
#include<cstdio>
using namespace std;
long long a,b,tot,cnt,ans[100005],num;
int main()
{
register long long i; scanf("%lld%lld",&a,&b);
for (i=1;;++i)
{
if ((tot+=i)==a+b) { num=i; break; }
if (tot>a+b) { printf("No"); return 0; }
}
for (i=num;i>=1;--i)
{
if (a>=i) a-=i,ans[++cnt]=i;
if (!a) break;
}
for (printf("%d ",num),i=cnt;i>1;--i)
printf("%d ",ans[i]); printf("%d",ans[1]);
return 0;
}
B. 「NOIP2017模拟赛11.02」Cover
一道非常玄学的好题,在CJJ dalao的不断教导下终于会了。
我们首先先把所有操作离线读进来,按修改的数来排序,如果相同就按序号排序。
然后我们发现所有数值一样的数就被排到一起去了。
接下来我们对于所有相同的数,修改时直接区间修改打个标记即可。
然后查找时只需要查找某个位置上最早被打上标记的时间即可。
看一下数据范围,发现不卡常(良心题),直接上线段树就艹过去了。
其实正解是\(O(n)\)的栈乱搞,但是我不会啊。
CODE
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=200005;
struct ques
{
int opt,x,y,z,id,ans;
}q[N];
struct segtree
{
int x,mark;
}tree[N<<2];
int n,m,h[N];
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(int &x)
{
x=0; char ch=tc();
while (ch<'0'||ch>'9') ch=tc();
while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=tc();
}
inline void write(int x)
{
if (x<0) putchar('-'),x=-x;
if (x>9) write(x/10);
putchar(x%10+'0');
}
inline bool comp1(ques a,ques b)
{
if (a.z<b.z) return 1;
if (a.z>b.z) return 0;
return a.id<b.id;
}
inline bool comp2(ques a,ques b)
{
return a.id<b.id;
}
inline void down(int rt,int x)
{
if (tree[rt].mark)
{
if (q[h[tree[rt<<1].x]].z!=x) tree[rt<<1].x=tree[rt<<1].mark=tree[rt].mark;
if (q[h[tree[rt<<1|1].x]].z!=x) tree[rt<<1|1].x=tree[rt<<1|1].mark=tree[rt].mark;
tree[rt].mark=0;
}
}
inline void modify(int rt,int l,int r,int beg,int end,int id,int x)
{
if (l!=r) down(rt,x);
if (l>=beg&&r<=end) { tree[rt].mark=id; if (q[h[tree[rt].x]].z!=x) tree[rt].x=id; return; }
int mid=l+r>>1;
if (beg<=mid) modify(rt<<1,l,mid,beg,end,id,x);
if (end>mid) modify(rt<<1|1,mid+1,r,beg,end,id,x);
}
inline int query(int rt,int l,int r,int id,int x)
{
if (l==r) return tree[rt].x?tree[rt].x:-1;
int mid=l+r>>1; if (l!=r) down(rt,x);
if (id<=mid) return query(rt<<1,l,mid,id,x); else return query(rt<<1|1,mid+1,r,id,x);
}
inline void solve(int l,int r)
{
int t=q[l].z;
for (register int i=l;i<=r;++i)
if (q[i].opt) q[i].ans=query(1,1,n,q[i].x,t); else modify(1,1,n,q[i].x,q[i].y,q[i].id,t);
}
int main()
{
//freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);
register int i; read(n); read(m);
for (i=1;i<=m;++i)
{
read(q[i].opt); q[i].id=i;
if (q[i].opt) read(q[i].x),read(q[i].z); else read(q[i].x),read(q[i].y),read(q[i].z);
}
sort(q+1,q+m+1,comp1);
for (i=1;i<=m;++i)
h[q[i].id]=i; int l,r=0; q[m+1].z=-1;
while (r<m)
{
l=++r; while (q[l].z==q[r+1].z) ++r;
solve(l,r);
}
sort(q+1,q+m+1,comp2);
for (i=1;i<=m;++i)
if (q[i].opt)
{
if (q[i].ans!=-1) write(q[q[i].ans].z!=q[i].z?-1:q[i].ans),putchar('\n');
else puts("-1");
}
return 0;
}
C. 「NOIP2017模拟赛11.02」统计岔道口
这道题是真的狗。让我怀疑人生。
由于我很菜,所以到现在都只会推平行的情况。
首先我们考虑只有平行时,那么最小值一定是\(0\)
这个很好理解吧,令它们全部平行即可。
那么最大值就是让第\(i\)条直线与之前的\(i-1\)条直线都相交。那么在没有任何限制的情况下,\(ans=\sum_{i=1}^{n-1}\)
然后考虑加入两条直线平行的操作时,我们直接把\(ans\)减去\(num[x]\cdot num[y]\)即可。其中\(num[x]\)表示与\(x\)平行的直线的数量(自己也算)
这样我们维护并查集即可。这里由于\(n\)的范围太大,所以map大法好。
30ptsCODE
#include<cstdio>
#include<map>
using namespace std;
map <int,int> num,father;
int n,m,opt,x,y;
long long ans;
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(int &x)
{
x=0; char ch=tc();
while (ch<'0'||ch>'9') ch=tc();
while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=tc();
}
inline void write(long long x)
{
if (x>9) write(x/10);
putchar(x%10+'0');
}
inline int getfather(int k)
{
return father[k]==k?k:father[k]=getfather(father[k]);
}
int main()
{
//freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);
read(n); read(m); ans=(long long)n*(n-1)/2;
while (m--)
{
read(opt); read(x); read(y);
if (!opt)
{
if (!father[x]) father[x]=x,num[x]=1;
if (!father[y]) father[y]=y,num[y]=1;
int fx=getfather(x),fy=getfather(y);
if (fx!=fy) father[fx]=fy,ans-=(long long)num[fx]*num[fy],num[fy]+=num[fx];
write(ans); puts(" 0");
}
}
return 0;
}
EZ 2018 06 10 NOIP2018 模拟赛(十八)的更多相关文章
- EZ 2018 06 17 NOIP2018 模拟赛(十九)
这次的题目难得的水,但是由于许多哲学的原因,第二题题意表述很迷. 然后是真的猜题意了搞了. 不过这样都可以涨Rating我也是服了. Upt:链接莫名又消失了 A. 「NOIP2017模拟赛11.03 ...
- EZ 2018 06 24 NOIP2018 模拟赛(二十)
很久之前写的一套题了,由于今天的时间太多了,所以记起来就写掉算了. 这一场尽管T2写炸了,但也莫名Rank4涨了Rating.不过还是自己太菜. A. 环游世界 首先我们先排个序,想一下如果不用走回来 ...
- EZ 2018 06 02 NOIP2018 模拟赛(十七)
这次的比赛是真心比较狗,我TM的写了30min的树剖ZZ地直接memset超时了 话说我既然想到差分就应该去写差分的啊! 好了不过这次Rank还挺高的,终于要打进前10了当然是假的了. 好了下面开始讲 ...
- EZ 2018 04 13 NOIP2018 模拟赛(八)
这次的题目都是什么鬼? 玄学乱搞+肉眼看CODE+倒着搜索? 好吧是我ZZ了 链接在此 T1 玄学乱搞 由于考场上写的部分分做法忘记讨论n<=2000时的情况,少得了30pts 很容易得到一个基 ...
- EZ 2018 05 20 NOIP2018 模拟赛(十五)
这次的比赛充满着玄学的气息,玄学链接 首先讲一下为什么没有第十四场 其实今天早上9点时看到题目就叫了:原题! 没错,整套试卷都做过,我还写了题解 然后老叶就说换一套,但如果仅仅是这样就没什么 但等13 ...
- EZ 2018 05 26 NOIP2018 模拟赛(十六)
这次难道就是传说中的标准分大赛?而且这次比赛的链接不翼而飞了 一堆人153pts然后就有Rank4?看来这个Rank4不值钱了,才涨了50+的Rating. 不过还好最后5min的时候想出了T1正解, ...
- EZ 2018 05 04 NOIP2018 模拟赛(十二)
这次的试卷应该是激励我们一下的,链接 然后大家的分数就都很高,然后我就210被一群秒A T2的240大佬爆踩 掉了5rating但Rank竟然发杀了 X_o_r dalao && YZ ...
- EZ 2018 04 21 NOIP2018 模拟赛(十) -LoliconAutomaton的退役赛
难得的一次Unrated,避免了重回1500的尴尬 其实题目都还可以,但只不过所有人T1都炸了,可能是数据的锅(假的) 而且我因为T1SB的把T2弃了,没想到是千年水题 T3莫名爆炸,然后TM的40分 ...
- EZ 2018 05 13 NOIP2018 模拟赛(十三)
这次的比赛真心水,考时估分240,然后各种悠闲乱逛 然后测完T1数组开小了炸成40,T2,T3都没开long long,T2炸成20,T3爆0 掉回1600+的深渊,但是还有CJJ dalao比我更惨 ...
随机推荐
- LearnX控件漏洞挖掘与利用
前言 大学英语会用到一个 ActiveX 插件 LearnX ,最近从网上下了一个下来分析了一下,找到了一些漏洞并完成了 exploit . 虽然涉及的知识比较老旧,不过还是挺有意思的.这里分享一下整 ...
- Google Chrome 下载&绿化&增强
Chrome下载 Google Chrome 已经可以在线更新,虽然比较慢! 国内常用的更新地址有两处:chromedownloads 和 shuax(耍下): https://www.chromed ...
- BigDecimal遇到的问题,大伙也说说
一:相除精度丢失的问题 BigDecimal的api除法相对加减乘要实现的复杂多了,只介绍常用的我遇到的问题: 问题:两数相除,如果9/3=3整除没问题,但是10/3=0.33333333...... ...
- [20170825]11G备库启用DRCP连接3.txt
[20170825]11G备库启用DRCP连接3.txt --//昨天测试了11G备库启用DRCP连接,要设置alter system set audit_trail=none scope=spfil ...
- Vlc支持IE 360 低版本的Google浏览器
VLC 插件代码: <object type='application/x-vlc-plugin' pluginspage="http://www.videolan.org/" ...
- Dos烧录脚本
Dos命令之前更改的太简单,现在加入判断是否进入fasboot模式和判断Android镜像是否存在:代码已经尽量简化成这样,dos命令功能还是比较不好用的,用了一下午的时间... @echo off ...
- Html引入百度富文本编辑器ueditor
在日常工作用,肯定有用到富文本编辑器的时候,富文本编辑器功能强大使用方便,我用的是百度富文本编辑器,首先需要下载好百度编辑器的demo, 然后创建ueditor.html文件,引入百度编辑器,然后在h ...
- 八皇后问题的Python实现和C#实现
看到八皇后问题的解决思路, 感觉很喜欢. 我用C#实现的版本之前贴在了百度百科上(https://baike.baidu.com/item/%E5%85%AB%E7%9A%87%E5%90%8E%E9 ...
- SQL注入的绕过
一.常用符号的绕过 1.空格 1 空格代替:+ %20 %09 %0a %0b %0c %0d %a0 %00 /**/ /*!*/ 2 括号绕过:常用于基于时间延迟的盲注,例如构造语句: ?id=1 ...
- Android的进阶学习(六)--理解View事件分发
http://www.jianshu.com/p/34cb396104a7 有些无奈,期末考试抱佛脚,还好没有挂,现在继续进阶. 好久以前就看到了View的事件分发,但是当时功底不够,源码也不敢深究, ...