好久没写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 模拟赛(十八)的更多相关文章

  1. EZ 2018 06 17 NOIP2018 模拟赛(十九)

    这次的题目难得的水,但是由于许多哲学的原因,第二题题意表述很迷. 然后是真的猜题意了搞了. 不过这样都可以涨Rating我也是服了. Upt:链接莫名又消失了 A. 「NOIP2017模拟赛11.03 ...

  2. EZ 2018 06 24 NOIP2018 模拟赛(二十)

    很久之前写的一套题了,由于今天的时间太多了,所以记起来就写掉算了. 这一场尽管T2写炸了,但也莫名Rank4涨了Rating.不过还是自己太菜. A. 环游世界 首先我们先排个序,想一下如果不用走回来 ...

  3. EZ 2018 06 02 NOIP2018 模拟赛(十七)

    这次的比赛是真心比较狗,我TM的写了30min的树剖ZZ地直接memset超时了 话说我既然想到差分就应该去写差分的啊! 好了不过这次Rank还挺高的,终于要打进前10了当然是假的了. 好了下面开始讲 ...

  4. EZ 2018 04 13 NOIP2018 模拟赛(八)

    这次的题目都是什么鬼? 玄学乱搞+肉眼看CODE+倒着搜索? 好吧是我ZZ了 链接在此 T1 玄学乱搞 由于考场上写的部分分做法忘记讨论n<=2000时的情况,少得了30pts 很容易得到一个基 ...

  5. EZ 2018 05 20 NOIP2018 模拟赛(十五)

    这次的比赛充满着玄学的气息,玄学链接 首先讲一下为什么没有第十四场 其实今天早上9点时看到题目就叫了:原题! 没错,整套试卷都做过,我还写了题解 然后老叶就说换一套,但如果仅仅是这样就没什么 但等13 ...

  6. EZ 2018 05 26 NOIP2018 模拟赛(十六)

    这次难道就是传说中的标准分大赛?而且这次比赛的链接不翼而飞了 一堆人153pts然后就有Rank4?看来这个Rank4不值钱了,才涨了50+的Rating. 不过还好最后5min的时候想出了T1正解, ...

  7. EZ 2018 05 04 NOIP2018 模拟赛(十二)

    这次的试卷应该是激励我们一下的,链接 然后大家的分数就都很高,然后我就210被一群秒A T2的240大佬爆踩 掉了5rating但Rank竟然发杀了 X_o_r dalao && YZ ...

  8. EZ 2018 04 21 NOIP2018 模拟赛(十) -LoliconAutomaton的退役赛

    难得的一次Unrated,避免了重回1500的尴尬 其实题目都还可以,但只不过所有人T1都炸了,可能是数据的锅(假的) 而且我因为T1SB的把T2弃了,没想到是千年水题 T3莫名爆炸,然后TM的40分 ...

  9. EZ 2018 05 13 NOIP2018 模拟赛(十三)

    这次的比赛真心水,考时估分240,然后各种悠闲乱逛 然后测完T1数组开小了炸成40,T2,T3都没开long long,T2炸成20,T3爆0 掉回1600+的深渊,但是还有CJJ dalao比我更惨 ...

随机推荐

  1. 安全测试 WEB安全测试手册

    WEB安全测试手册 By:授客 QQ:1033553122 欢迎加入软件性能测试交流QQ群:7156436 概述 Ø          目的 Ø          适用读者 Ø          适用 ...

  2. Clumsy 利用无线网卡结合Clumsy软件模拟弱网络测试

    利用无线网卡结合Clumsy软件模拟弱网络测试 by:授客 QQ:1033553122 实践环境 Clumsy 0.2 下载地址:http://jagt.github.io/clumsy/downlo ...

  3. 《Inside C#》笔记(六) 属性、数组、索引器

    一 属性 a) 属性可用于隐藏类的内部成员,对外提供可控的存取接口.属性相当于有些语言的getter.setter方法,只是使用起来更加方便一点,而且查看对应的IL码可以看到,属性的本质也确实是方法. ...

  4. js,H5本地存储

    //存储本地存储----setItem(存储名称,数据名称) var c={name:"man",sex:"woman"}; localStorage.setI ...

  5. 移动端不利用HTML5和echarts开发一样可以实现大数据展示及炫酷统计系统(产品技术综合)

    一.由于项目需要进行手机看板展示设计及开发展示效果图如下:

  6. 將UNITY作品上傳到Facebook App!

    前言 大家好,今天要來介紹如何用UNITY 將製作好的遊戲上傳到Facebook,也就是Facebook App.近期Facebook與Unity合作而推出了新的插件,利用插件可上傳分數.邀請好友.P ...

  7. 利用PCA进行故障监测

    利用PCA进行故障监测,传统的统计指标有两种:Hotelling-T2和平方预测误差(Squared prediction error, SPE).T2统计量反映了每个主成分在变化趋势和幅值上偏离模型 ...

  8. February 2nd, 2018 Week 5th Friday

    Reputation takes a life time to build and a second to destroy. 树立名声需要一生的努力,而毁掉它只需要一秒. To be a smart ...

  9. 联想笔记本Y7000P安装nvidia,cuda,tensorflow,pytorch

    Y7000P电脑环境i7处理器,1060显卡,16g内存,win10家庭版(系统版本号1809),在联想官网升级过bios,所有驱动都是最新.(截止时间点2019年3月1日) python3.5 安装 ...

  10. Android Studio 学习Demo内容及一些bug处理技巧 -----个人技术文档,两次冲刺总结

    实现的基本内容 1.基本界面的注册(包括转换界面,隐式,显式注册,主界面的入口注册) 2.匿名内部类实现Button按钮的监听事件,并通过Toast进行显示 3.界面切换(显式.隐式) 4.调用浏览器 ...