好久没写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

  1. #include<cstdio>
  2. using namespace std;
  3. long long a,b,tot,cnt,ans[100005],num;
  4. int main()
  5. {
  6. register long long i; scanf("%lld%lld",&a,&b);
  7. for (i=1;;++i)
  8. {
  9. if ((tot+=i)==a+b) { num=i; break; }
  10. if (tot>a+b) { printf("No"); return 0; }
  11. }
  12. for (i=num;i>=1;--i)
  13. {
  14. if (a>=i) a-=i,ans[++cnt]=i;
  15. if (!a) break;
  16. }
  17. for (printf("%d ",num),i=cnt;i>1;--i)
  18. printf("%d ",ans[i]); printf("%d",ans[1]);
  19. return 0;
  20. }

B. 「NOIP2017模拟赛11.02」Cover

一道非常玄学的好题,在CJJ dalao的不断教导下终于会了。

我们首先先把所有操作离线读进来,按修改的数来排序,如果相同就按序号排序。

然后我们发现所有数值一样的数就被排到一起去了。

接下来我们对于所有相同的数,修改时直接区间修改打个标记即可。

然后查找时只需要查找某个位置上最早被打上标记的时间即可。

看一下数据范围,发现不卡常(良心题),直接上线段树就艹过去了。

其实正解是\(O(n)\)的栈乱搞,但是我不会啊。

CODE

  1. #include<cstdio>
  2. #include<algorithm>
  3. using namespace std;
  4. const int N=200005;
  5. struct ques
  6. {
  7. int opt,x,y,z,id,ans;
  8. }q[N];
  9. struct segtree
  10. {
  11. int x,mark;
  12. }tree[N<<2];
  13. int n,m,h[N];
  14. inline char tc(void)
  15. {
  16. static char fl[100000],*A=fl,*B=fl;
  17. return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
  18. }
  19. inline void read(int &x)
  20. {
  21. x=0; char ch=tc();
  22. while (ch<'0'||ch>'9') ch=tc();
  23. while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=tc();
  24. }
  25. inline void write(int x)
  26. {
  27. if (x<0) putchar('-'),x=-x;
  28. if (x>9) write(x/10);
  29. putchar(x%10+'0');
  30. }
  31. inline bool comp1(ques a,ques b)
  32. {
  33. if (a.z<b.z) return 1;
  34. if (a.z>b.z) return 0;
  35. return a.id<b.id;
  36. }
  37. inline bool comp2(ques a,ques b)
  38. {
  39. return a.id<b.id;
  40. }
  41. inline void down(int rt,int x)
  42. {
  43. if (tree[rt].mark)
  44. {
  45. if (q[h[tree[rt<<1].x]].z!=x) tree[rt<<1].x=tree[rt<<1].mark=tree[rt].mark;
  46. if (q[h[tree[rt<<1|1].x]].z!=x) tree[rt<<1|1].x=tree[rt<<1|1].mark=tree[rt].mark;
  47. tree[rt].mark=0;
  48. }
  49. }
  50. inline void modify(int rt,int l,int r,int beg,int end,int id,int x)
  51. {
  52. if (l!=r) down(rt,x);
  53. if (l>=beg&&r<=end) { tree[rt].mark=id; if (q[h[tree[rt].x]].z!=x) tree[rt].x=id; return; }
  54. int mid=l+r>>1;
  55. if (beg<=mid) modify(rt<<1,l,mid,beg,end,id,x);
  56. if (end>mid) modify(rt<<1|1,mid+1,r,beg,end,id,x);
  57. }
  58. inline int query(int rt,int l,int r,int id,int x)
  59. {
  60. if (l==r) return tree[rt].x?tree[rt].x:-1;
  61. int mid=l+r>>1; if (l!=r) down(rt,x);
  62. if (id<=mid) return query(rt<<1,l,mid,id,x); else return query(rt<<1|1,mid+1,r,id,x);
  63. }
  64. inline void solve(int l,int r)
  65. {
  66. int t=q[l].z;
  67. for (register int i=l;i<=r;++i)
  68. 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);
  69. }
  70. int main()
  71. {
  72. //freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);
  73. register int i; read(n); read(m);
  74. for (i=1;i<=m;++i)
  75. {
  76. read(q[i].opt); q[i].id=i;
  77. 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);
  78. }
  79. sort(q+1,q+m+1,comp1);
  80. for (i=1;i<=m;++i)
  81. h[q[i].id]=i; int l,r=0; q[m+1].z=-1;
  82. while (r<m)
  83. {
  84. l=++r; while (q[l].z==q[r+1].z) ++r;
  85. solve(l,r);
  86. }
  87. sort(q+1,q+m+1,comp2);
  88. for (i=1;i<=m;++i)
  89. if (q[i].opt)
  90. {
  91. if (q[i].ans!=-1) write(q[q[i].ans].z!=q[i].z?-1:q[i].ans),putchar('\n');
  92. else puts("-1");
  93. }
  94. return 0;
  95. }

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

  1. #include<cstdio>
  2. #include<map>
  3. using namespace std;
  4. map <int,int> num,father;
  5. int n,m,opt,x,y;
  6. long long ans;
  7. inline char tc(void)
  8. {
  9. static char fl[100000],*A=fl,*B=fl;
  10. return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
  11. }
  12. inline void read(int &x)
  13. {
  14. x=0; char ch=tc();
  15. while (ch<'0'||ch>'9') ch=tc();
  16. while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=tc();
  17. }
  18. inline void write(long long x)
  19. {
  20. if (x>9) write(x/10);
  21. putchar(x%10+'0');
  22. }
  23. inline int getfather(int k)
  24. {
  25. return father[k]==k?k:father[k]=getfather(father[k]);
  26. }
  27. int main()
  28. {
  29. //freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);
  30. read(n); read(m); ans=(long long)n*(n-1)/2;
  31. while (m--)
  32. {
  33. read(opt); read(x); read(y);
  34. if (!opt)
  35. {
  36. if (!father[x]) father[x]=x,num[x]=1;
  37. if (!father[y]) father[y]=y,num[y]=1;
  38. int fx=getfather(x),fy=getfather(y);
  39. if (fx!=fy) father[fx]=fy,ans-=(long long)num[fx]*num[fy],num[fy]+=num[fx];
  40. write(ans); puts(" 0");
  41. }
  42. }
  43. return 0;
  44. }

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. 【转】对cocos2d 之autorelease\ratain\release的理解

    原文链接:http://blog.sina.com.cn/s/blog_4057ab6201018y4y.html Objective C内存管理进阶(二):理解autorelease: http:/ ...

  2. springcloud 入门 8 (config配置中心)

    Spring Cloud Config: 配置中心为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件,它就是Spring Cloud Config. 在分布式系统中,由于服务数量巨多, ...

  3. 网页html随机切换背景图片

    首先要准备一些图像,图像的大小(无论是尺寸大小还是数据大小)要控制好,如果太大,会使用户等不及查看全图就跳出了,如果太小,又会影响页面质量. 在script中将这些图像编为一个数组,便于调用.数组的长 ...

  4. (后端)Java跨域过滤器

    private FilterConfig config = null; @Override public void init(FilterConfig config) throws ServletEx ...

  5. [20170927]hugepages与内核参数nr_overcommit_hugepages.txt

    [20170927]hugepages与内核参数nr_overcommit_hugepages.txt /proc/sys/vm/nr_overcommit_hugepages specifies h ...

  6. Hadoop2.7.6_03_HDFS原理

    1. HDFS前言 l  设计思想 分而治之:将大文件.大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析: l  在大数据系统中作用: 为各类分布式运算框架(如:m ...

  7. Beta冲刺! Day1 - 磨刀

    Beta冲刺! Day1 - 磨刀 今日已完成 晨瑶:罗列Beta计划.和新人交接.任务安排 昭锡:无 永盛:服务器出现一些 mysql 的问题,伟鹏的爬取脚本没办法远程链接到服务器,在修 立强:学习 ...

  8. beta版本汇总

    deta版本五天汇总 day1 day2 day3 day4 day5 GitHub地址 前端代码github地址 后端代码github地址 这里说明一下我们队伍的安排风格: 第一天:明确安排前后端的 ...

  9. 简单规划dp sumsets

    Farmer John commanded his cows to search for different sets of numbers that sum to a given number. T ...

  10. 洛谷P1223

    #include <iostream>#include <algorithm>#include <cstdio>using namespace std;int b[ ...