摘要: 边读入边处理 优化了速度一开始有想错了的地方。处理输入有点想用stringstream, 的问题在于他把字符串连续的数字作为一个整体,遇到空格才分开,所以不适用 阅读全文
posted @ 2018-10-05 19:24 Erio 阅读(307) 评论(0) 推荐(0) 编辑
摘要: 先证明把每次i放到i位置最后次数最少:感觉,可以,用归纳法? //在序列后再加一个相同的序列,就可以模拟用各个数字开头的情况了每个位置不对的只需要换一次54123 ,5固定->41235变成12345 任何一个数固定不变,都相当于从这种情况对应的1所在的位置开始排一遍12345.(例如54123 , 阅读全文
posted @ 2018-10-05 19:22 Erio 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 贪心加优先队列 (默认是小的在前,正好) //这里又很套路,设队列里的都是符合条件的考虑新加入的即可。再处理一下空队列的情况。很完美// 截止时间短的在前面,干的就多先根据截止日期排序优先队列根据完成所需时间排序首先队列里的都是能完成的策略:新加入的,如果在前面的完成后仍能完成,就直接加进去;不能, 阅读全文
posted @ 2018-10-05 19:20 Erio 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 画图,每个给出点都有对应区间;先sort,再尽量靠右选;很常见的套路了..//注意不要越界(0,L) struct Q //复习结构{ double l,r; Q(double _l,double _r):l(_l),r(_r){} bool operator < (const Q &a) cons 阅读全文
posted @ 2018-10-05 19:19 Erio 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 贪心部分的理论依据:前i个数可以凑出1~sum[i]的所有整数。 证明:第二类数学归纳,n=1时成立,假设n=k之前所有项都成立,当n=k+1时。sum[k+1]=sum[k]+a[k+1]。只需证明能凑出sum[k]+1~sum[k+1]间的整数即可。设1≤p≤a[k+1],sum[k]+p=su 阅读全文
posted @ 2018-10-05 19:18 Erio 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 题目要求k>=最大度数;观察,颜色数量和度数的关系,得颜色数=最大度数+1(偶数)//最大度数(奇数) 可以满足染色关系一个点和周围的点的颜色数加起来最大为它的度数+1; k=所有点中最大的度。如果最大入度是偶数,则k+1。证明:当最大度数为奇数n,设点u所连n个点,点u为1,n-1个点不一样,1个 阅读全文
posted @ 2018-10-05 19:16 Erio 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 和cf的打分有点像啊 因为一共只有三道题,所以每个人的得分最多有8种可能性。把这8种可能性都算出来,存在数组里,排好序备用排名就是一个天然的链表,给出了扫描的顺序扫描时,维护两个变量:前一个player的最大得分 recd 和他的ID recdID扫描到每个player时,从大到小遍历他的8种得分, 阅读全文
posted @ 2018-10-05 19:14 Erio 阅读(367) 评论(0) 推荐(0) 编辑
摘要: 逆序做,逆序输出 紫书上的描述有点问题 感觉很经典 ans.push_back(2); a.insert(a.begin(),a[n-1]); a.erase(a.end()-1); a.push_back(k);vector 的操作 没有证明这样做的复杂度要求... 阅读全文
posted @ 2018-10-05 19:13 Erio 阅读(288) 评论(0) 推荐(0) 编辑
摘要: 类似煎饼,先把1放到1,之后是子问题 (先放到前一半,再放到开头,两次操作)(任何位置,最多一次就可以放到前一半)) 阅读全文
posted @ 2018-10-05 19:10 Erio 阅读(309) 评论(0) 推荐(0) 编辑
摘要: 首先根据题意,既然0能变1,问号能变任何。那么不能变成T串的情况只能是S串中的1大于T串中1的个数。 然后考虑能够成为T串的情况。首先,不相同的0和不相同的1首先进行置换,因为这样置换只需进行一次操作,比其它任何情况都优。交换次数为diff0 diff1中小的那个次,之后借由?再有2*(diff0 阅读全文
posted @ 2018-10-05 19:07 Erio 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 细节值得注意 注意vector<string>是可以直接sort的! 阅读全文
posted @ 2018-10-05 19:06 Erio 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 连通器向左向右扫描两次即可每一段有水的连通区域,高度必须相同,且不超过最低天花板高度if(p[i] > level) level = p[i]; 被隔断,要上升(隔断后,之前的就不变了,之后的从p【i】开始) if(s[i] < level) level = s[i]; h[i] = level;左 阅读全文
posted @ 2018-10-05 19:03 Erio 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 思维 创造条件使一轮比赛之后仍满足1号打败至少一半,并剩下至少一个t' 紫书上的思路很清晰阶段1,3保证黑色至少消灭1半 #include<cstdio> #include<vector> using namespace std; const int maxn = 1024 + 5; char ta 阅读全文
posted @ 2018-10-05 19:01 Erio 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 某个序列找到唯一元素后,判断被分成的两边的序列即可问题在于找到唯一元素连续序列,重复元素的问题;感觉很有一般性 查找相同元素用map,last,next存上一个相同元素的位置复杂度计算有点思考;记录last,next,那么对于一个元素,判断是否独立O(1)从头开始查找,最坏情况T(n)=T(n-1) 阅读全文
posted @ 2018-10-05 19:00 Erio 阅读(157) 评论(0) 推荐(0) 编辑