题目描述 Koishi喜欢线段. 她的条线段都能表示成数轴上的某个闭区间.Koishi喜欢在把所有线段都放在数轴上,然后数出某些点被多少线段覆盖了. Flandre看她和线段玩得很起开心,就抛给她一个问题: 数轴上有个点突然兴奋,如果自己被身上覆盖了超过条线段,这个点就会浑身难受然后把Koishi批判一番. Koishi十分善良,为了不让数轴上的点浑身难受,也为了让自己开心,她想在数轴上放入尽量多的线段. 按照套路,Koishi假装自己并不会做这道题,所以她就来求你帮忙.并承诺如果你解决了问题就…
正解:贪心 解题报告: 传送门! 首先在学习贪心的入门题的时候我们就知道,当x=1的时候,也就是每条线段不能相交的时候的做法——就按右端点排序然后能选就选,也就是会议安排问题,原因显然?就你选右端点更靠左的线段显然不会更劣 然后现在考虑x!=1了怎么做 于是考虑类似的套路,依然是右端点排序能选就选,考虑什么时候不能选了?就加入现在新加入了一条线段,然后导致有个点被覆盖次数超过x了,那肯定就是要从覆盖了这个点的边中删去一条?然后就考虑删哪条?那就显然是把右端点最靠右的给删了,证明的话,因为我们是从…
洛谷题目传送门 贪心小水题. 把线段按左端点从小到大排序,限制点也是从小到大排序,然后一起扫一遍. 对于每一个限制点实时维护覆盖它的所有线段,如果超过限制,则贪心地把右端点最大的线段永远删去,不计入答案.显然这样做对后面的决策更有利. 以右端点为键值,需要资瓷动态插入,删除最小值.最大值,multiset就行了. 代码很短,常数应该比较大,但不知为何暂时混了个rk1. #include<bits/stdc++.h> #define R register int #define G if(++i…
传送门 题解 既然是选取区间,没说顺序 肯定先排遍序 都是套路 那么按什么排序呢??? 为了方便处理 我们把区间按左端点从小到大排序 把关键点也按从小到大排序 假设当扫到 \(i\) 点时,i 点之前的点都已处理完毕 (已达上限,或是覆盖了的区间全部取了) 既然要选的区间多 所以需要选的区间对后面的影响少,所以把所有覆盖了当前关键点按右端点从小到大依次选取,直至上限满了为止 这个 用set就解决了 不过一定要记得把右端点小于当前关键点的区间弹掉 代码 #include<bits/stdc++.h…
题目描述 Koishi十分喜欢数论. 她的朋友Flandre为了检测她和数论是不是真爱,给了她一个问题. 已知 给定和个数,求对取模. 按照套路,呆萌的Koishi当然假装不会做了,于是她来向你请教这个问题,希望你能在秒内给她答案. 输入输出格式 输入格式: 第一行包含两个整数和,接下来一行个整数表示. 输出格式: 一个整数,表示答案 输入输出样例 输入样例#1: 3 5 1 2 4 5 0 输出样例#1: 44044 说明 表示若干个数的最小公倍数 对于10%的数据: 对于另外20%的数据:…
题目描述 Koishi决定走出幻想乡成为数学大师! Flandre听说她数学学的很好,就给Koishi出了这样一道构造题: Task1:试判断能否构造并构造一个长度为的的排列,满足其个前缀和在模的意义下互不相同 Taks2:试判断能否构造并构造一个长度为的的排列,满足其个前缀积在模的意义下互不相同 按照套路,Koishi假装自己根本不会捉,就来找你帮忙辣. 输入输出格式 输入格式: 第一行两个整数和,分别表示Task类型和测试点内的数据组数. 接下来行,每行一个整数表示每组数据中的 输出格式:…
正解:构造 解题报告: 传送门! 这题俩问嘛,就分成两个问题港QwQ 就按顺序趴,先港第一问QwQ 首先要发现,n在膜n意义下就是0嘛 那作为前缀和的话显然它就只能放在第一个 然后再想下,发现,如果n是奇数那1+...+n显然是n的倍数,就又是个膜意义下=0的,GG 偶数显然麻油关系咯QwQ 所以我们就可以先特判下,如果n是奇数直接GG辣(昂n==1要特判下吼QwQ 然后显然的是既然有解了就是一定能表示出所有的[0,n-1] 然后我们就这么想吼(以下表示都是在膜意义下的QwQ 1+n=1 3+(…
[Luogu3602]Koishi Loves Segments(贪心) 题面 洛谷 题解 离散区间之后把所有的线段挂在左端点上,从左往右扫一遍. 对于当前点的限制如果不满足显然会删掉右端点最靠右的那根,拿一个堆维护一下就好了. #include<iostream> #include<cstdio> #include<algorithm> #include<vector> using namespace std; #define MAX 400400 inl…
洛谷 P1580 yyy loves Easter_Egg I 题解: 队列+字符串 #include <cstdio> #include <string> #include <cstring> #include <iostream> #include <algorithm> using namespace std; ; ; char a[MAXN],b[MAXN],n1[MAXN],n2[MAXN]; int main() { gets(a);…
题目链接 对于一个区间\([x,y]\),设这个区间的总和为\(S\) 那么我们在前缀和(设为\(sum[i]\))的意义上考虑到原操作其实就是\(sum[x−1]+=S\) , \(sum[x]+S−S\) , \(sum[y]−=S\) , \(sum[y+1]+S−S\). 而且我们注意到,本来就有\(sum[x−1]+S==sum[y]\),所以观察到其实原操作只是单纯的交换了一下\(sum[x−1]\)和\(sum[y]\)而已,而且这个\([x,y]\)区间任意选择,故原题已经可以改…