noip倒计时…
似乎没有之前那么狼狈、不堪了…
人总要向前看…
还是做一下这两天的总结…
昨天上午t1交错文件掉了两百分…两!百!
t3是个不错的题,一个点就是:询问第一个不能被满足的请求这类问题可以二分!
二分一个询问判断能不能达到。
然后并查集真是个好东西。如果要把一些区间赋值成1,并且查询区间内是否都被覆盖,可以用并查集实现。用f[i]表示点i右边最近的是0的点的编号。
初始f[i]=i;
两个操作:覆盖[l,r]:
for(int i=find(l);i<=r;i++)
{
f[find(i)]=find(l+1);
}
查询[l,r]中是否有0:
if(find(l)>r) return false;
else return true;
妙啊!
来看看下午。
t1是一道叫做“水题”的题。
看上去像是二分图匹配…但发现妥妥地t…
其实这个两维的问题可以先考虑一维的情况,那就是左边的长ai覆盖右边比小于等于它的第一个bi。当然这可以用一个简单的平衡树实现…(其实multiset就好)…
那么两维怎么办?
先把第一维从小到大排序,从前往后扫,这样后扫到的一定能覆盖前面的(只看第一维),也就是不用考虑第一维,就可以把问题转化成一维的了。
然后就是t2…
第一问挺好想的,第二问我打的暴力…
但是暴力打的太丑了,其实如果打得好或者转dp就是可以过的。
dp的状态其实和爆搜是一样的…
今天上午t1是个贪心,想出了正解但是写挂了得了60…
t2神奇的题目…
t3有一个神奇的做法,就是开一个vector f[i][j]表示mod i==j的数的编号。
妙不可言。
那么如何求[l,r]中mod p==v 的个数?
在f[p][v]里二分!
二分出大于等于l的最小的元素,和小于等于r的最大的元素,他们在f[p][v]里下表的差就是要求的个数。
下午t1、t2**题。
t3难度有点大…思路虽然是对的但是写出来是 有点 有些 有很大难度的…
但有一个point,就是当状态数很多的时候,可以用记忆化搜索代替dp,这样就只求出了有用的状态。并且开一个map代替数组。
反正考试看到这么难的题直接部分分到手就万事大吉…
两天590…
脸上笑嘻嘻…
那么,晚安…
Leaving…
下周的这个时候我就已经在考场上了…
抱着电脑不知道该写些什么…
学OI已经将近半年了,所有的付出都在七个小时里开花…
彷徨,不安…
就像自招前…
可是又大不相同…
我不知道结果会怎样…
“人生不是动态规划,而是贪心。”
可是我做不到…做不到不去想任何东西…做不到乐观面对一个没有什么期望的结果…
“我要变强…”
只能给自己唯一的安慰,一直相信着的,也许验证不了的理由…
愿你走出半生,归来仍是少年…