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比我更惨 ...
随机推荐
- [Android] ubuntu 下不识别 Android 设备
之前的android手机给家人用了,手里现在有一个旧手机,调试过程又出现不识别的问题,这次要记录一下. 首先,需要把手机开发者选项打开,在设置里对着android版本或者型号多点几次,就会打开. 原文 ...
- android recovery 升级之USB设备挂载
Recovery升级过程,通常会从两个地方获取升级包update.zip升级,一般在线升级,会把升级包下载到cache分区,本地升级会从usb或者tf卡中升级.本文讨论下,本地USB升级时,无法挂载U ...
- 利用python中的gensim模块训练和测试word2vec
word2vec的基础知识介绍参考上一篇博客和列举的参考资料. 首先利用安装gensim模块,相关依赖如下,注意版本要一致: Python >= 2.7 (tested with version ...
- linux 下的ssh
ssh服务 1.检查是否有被安装,命令 rpm -qa|grep "ssh" 2.检查ssh有没有在运行,命令 rpm -qa|grep "ssh" 3.如何启 ...
- Android视屏播放兼容性问题分享
最近产品提了一个紧急需求:webview加载的URL,需要支持视频播放. 为了快速完成需求,功能实现上直接使用系统自带播放器播放视频.由于是自带播放器,需要进行兼容性测试,过程发现了不少问题,这里分享 ...
- Python之逻辑回归
代码: import numpy as np from sklearn import datasets from sklearn.linear_model import LogisticRegress ...
- 【redis专题(4)】命令语法介绍之sorted_set
有序集合可以模拟优先级队列的实现 增 zadd key score1 value1 score2 value2 .. redis 127.0.0.1:6379> zadd stu 18 lily ...
- C#语言————两值交换
//两值交换 public static void Show(ref int num1,ref int num2) { int num=num1; num1=num2; num2=num; } sta ...
- Python面试题(一)【转】
注:本面试题来源于网络,转载自http://www.cnblogs.com/goodhacker/p/3366618.html. 1. (1)python下多线程的限制以及多进程中传递参数的方式 py ...
- Memcached、Redis、RabbitMQ
目录 一.Memcached 二.Redis 三.RabbitMQ Memcached Memcache 是一个开源.高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中 ...