THUSC2016】的更多相关文章

#include <cstdio> using namespace std; int main(){ puts("转载请注明出处:http://www.cnblogs.com/wangyurzee7/"); puts("谢谢您的配合"); puts("by wangyurzee7"); return 0; } Day-1去thusc前一天.<del>退役狗</del>LK也去了林荫机房,明天就可以和成七老司机面…
浑浑噩噩地就出发了,只记得可以翘课,不知道自己要干什么去. Day 0    5点起床,到潮汕机场坐飞机.第一次坐飞机非常不爽起飞和降落时的加速度……终于还是转转地铁.动车在下午4点左右抵达目的地,西郊宾馆.按事先的安排和Ccz住双人房.北京的红绿灯好奇怪啊,红灯刚过,绿灯就开始闪,闪了很久也没变化……晚上KPM出去浪,Czl来我们房间玩,于是我们在他电脑上玩去<疯狂小人战斗>,考前回归一发童年.(3P 3个键盘真爽) Day 1    6点醒,吃了顿挺不错的早餐,就坐车去THU了,200号人…
字符串扔进trie,vector记录每个前缀出现次数的最大值的更新记录即可. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> #include<vector> using namespace std; #define ll long long #define…
拿走一个区间的代价只与最大最小值有关,并且如果最后一次拿走包含区间右端点的子序列一定不会使答案更劣,于是设f[i][j][x][y]为使i~j区间剩余最小值为x最大值为y且若有数剩余一定包含j的最小代价,特别地f[i][j][0][0]表示取完i~j区间的最小代价.转移时考虑j最后和哪一段一起拿走,有f[i][j][min(x,a[j])][max(y,a[j])]=min{f[i][d-1][x][y]+f[d][j-1][0][0]},这样就能处理拿走一段后区间的合并了. 区间dp好难啊.…
4897: [Thu Summer Camp2016]成绩单 Time Limit: 40 Sec  Memory Limit: 512 MBSubmit: 220  Solved: 132[Submit][Status][Discuss] Description 期末考试结束了,班主任L老师要将成绩单分发到每位同学手中.L老师共有n份成绩单,按照编号从1到n的顺序叠 放在桌子上,其中编号为i的成绩单分数为w_i.成绩单是按照批次发放的.发放成绩单时,L老师会从当前的一叠 成绩单中抽取连续的一段…
4896: [Thu Summer Camp2016]补退选 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 653  Solved: 228[Submit][Status][Discuss] Description X是T大的一名老师,每年他都要教授许多学生基础的C++知识.在T大,每个学生在每学期的开学前都需要选课,每 次选课一共分为三个阶段:预选,正选,补退选:其中"补退选"阶段最忙碌.在补退选阶段,学生即可以选课,也 可以退课.对…
$f(i,j,x,y)$ 表示区间 $[i,j]$中,第 $j$ 个数在最后一次操作中才消去,最后一次操作的最大值为 $x$,最小值为 $y$ 时的最小代价: $g(i,j)$ 表示区间 $[i,j]$ 中,不管第 $j$ 个数是在之前哪次消的情况下,消掉区间所有数的总代价. 则 $$f(i,j,max(a,w_i),min(b,w_i)) = \min(f(i,j,max(a,w_i),min(b,w_i)),\space f(i,k,a,b)+g(k+1,j-1))$$ $$g(i,j)=\…
题目大意:略 这竟然是$thusc$的题... 先把询问里加入的串全拎出来,建出$Trie$树,$Trie$里每个节点都开一个$vector$记录操作标号,再记录操作数量$sum$ 然后瞎**搞搞就行了 又水了一篇博客 #include <cmath> #include <queue> #include <vector> #include <cstdio> #include <cstring> #include <algorithm>…
传送门 一道字典树的例题吧 先说下思路前1,2两个条件都易满足,字典树插入修改即可,第三个条件可用动态数组来实现,存下它的size表示当前有几个节点经过(即人数),其下标表示第几次出现,里面存入操作次数(即时刻),然后字典树修改即可. 上代码 #include<bits/stdc++.h> using namespace std; const int N=300000;//开大点200000有一个点没过 struct node{ int ch[30],size; vector<int&g…
点此看题面 大致题意: 三种操作:加入一个字符串,删除一个字符串,求最早什么时候以某个字符串为前缀的字符串个数超过给定值. \(Trie\) 这道题显然是\(Trie\)的暴力裸题. 考虑我们对于\(Trie\)上的每个节点,开一个\(vector\),其中第\(i\)位(注意\(vector\)的下标是从\(0\)开始的)存储以这个节点所代表的字符串为前缀的字符串个数超过\(i\)的最早时间. 至于这怎么维护,只要同时再维护一下对于每个字符串当前以其为前缀的字符串个数,由于这个个数每次最多修改…