2016.11.03解题报告
今天的题几乎全是多组读入数据且数据很大的,所以准备好读入优化(cin就不一定保险)和longlong还是有必要的……养成好习惯,以免出低级bug
Part.1 防线
乍一看似乎是道数论题,然而看到数据范围——跪了。不过某种意义上这道题确实是数据范围剧透解法系列……
解题思路
都到2^31-1了,也只能有logn不会超时了,进而想到了二分。那么问题来了,二分啥?有什么量是符合二分性质的?题目中说“防线上也最多只有一个位置有奇数个防具“,所以单数个防具的位置所在的区间防具总数也一定是单数。也就是说,如果一个区间的防具总数为单数,那么该区间内一定有解,否则该区间内一定无解。这样就满足性质,可以二分了。每次取mid,枚举i(1<=i<=n)累加判断左半个(或者右半个也无所谓)区间的防具总数,此处用到了公式:区间[l,r]内满足max(l,s[i])<=s[i]+d[i]<=min(r,e[i])的i的总数为:
if (mid>e[i]) cnt=(e[i]-s[i])/d[i]+1;
else cnt=(mid-s[i])/d[i]+1;
二分结束时判断左右端点哪个成立即可,若都不成立则无解。
Part.2 星象仪(pla)
一开始确实想到了树P,然而死于位运算和题目理解……愣是瞅了半个小时才看懂题目样例是怎么跑的……
解题思路
先树型DP跑出根节点第一次输出1时需要调整的次数,之后每变一次信号答案就+1(证明:因为跑完树P后dp[1]得到的是把根节点调成1的最小步数,所以在此之前一定都是0,也就是说无论怎样一定有一种状态满足当前为0、再调一步为1)。至于树P的跑法,据说是对于两颗子节点的返回值,”|”门取较小,”&”门求和……
Part.3 分形之城(fra)
一道变态的分治题……首先你要火眼金睛看出来这个图相邻两级的关系,即n级图是怎样由n-1级转来转去转出来的(此刻HP已掉了1/3),然后你还要确定每一种转法得到的坐标与原图的关系(系统提示:您的HP已经见底,请注意安全),最后还要处理最后的距离问题,虽然不难但是也有炸long long和吞精度的风险……
(原题是openjudge分治里的stupidcat&doge)
解题思路
每一级图都是由上一级经过旋转对称得来的,显然是四块图拼起来,按街区编号的顺序分成1、2、3、4号子图,则由观察得出2、3号子图和上一级一毛一样,1号子图是上一级顺时针旋转90度再重新标号,4号子图是逆时针转90度再重新标号。由此我们可以一直递归,直到找到第1级图,返回对应的1、2、3、4号点的坐标再进行处理就好了。至于坐标关系,最好还是看代码分析分析得了……
(k表示原图里第num号点在子图中的序号,1号子图里就是num,2号是num-p(子图大小),3号是num-2p,4号是num-3p)
(x表示横坐标,y表示纵坐标)
1号子图第k个点x:n-1级图第k个点的y;
2号子图第k个点x:n-1级图第k个点的x;
3号子图第k个点x:n-1级图第k个点的x+子图边长;
4号子图第k个点x:n-1级图第k个点的y*(-1)+1+原图边长;
1号子图第k个点y:n-1级图第k个点的x;
2号子图第k个点x:n-1级图第k个点的y+子图边长;
3号子图第k个点x:n-1级图第k个点的y+子图边长;
4号子图第k个点x:n-1级图第k个点的x*(-1)+1+子图边长;