[原创]第十四届北京师范大学程序设计竞赛 [6/11]
2017-05-07 19:48:25 Tabris_ 阅读数:1295
博客爬取于 2020-06-14 22:40:45
以下为正文
版权声明:本文为 Tabris 原创文章,未经博主允许不得私自转载。
https://blog.csdn.net/qq_33184171/article/details/71366392
虽然只是校赛,但是题目质量真的很高啊,
学到了新姿势,自己的思维还是太局限了。,
A Check In
————————————————————————————————————————————————
水题, 注意队伍名可能是 bnuu 这类
B Squared Permutation
————————————————————————————————————————————————
其实还是一个基础的题目,维护区间和就行了,树状数组,线段树都可以
维护的时候,维护所有位置的真实值,即如果当前值是 b 那么就是 a[b]
再求区间和的时候就是基本的区间求和的操作了,
对于交换操作,很容易发现,交换的时候只对四个值有影响,
a[l],a[r]还有 a[i]==l 的位置,a[i]==r 的位置,
先处理交换操作,然后在去修改就可以了,
复杂度是O(n\log n)
附本题代码
——————————————————————————————
1 | # include <bits/stdc++.h> |
C Quailty's Life
————————————————————————————————————————————————
不会
D Air Hockey
————————————————————————————————————————————————
其实很容易想到以一个点作为参照,然后计算另一个点,
然后讨论一下,动点与静点越来越远的轻况 那么最开始的距离就是最近的
然后列方程可以求得静点到动点轨迹的垂足坐标,然后计算就可以了,
但是!但是!但是! 无论怎么修精度什么的就是过不去,最后 GG,如果思路有纰漏请指正
最后用三分的方法过掉的,
首先我们能确定两个运动轨迹是直线,那么两点距离是先变小,在变大,这就是一个凹函数,可以三分求得极值,
给定时间了,就能求出两点当前的位置,然后算距离就好了
如果这个距离大于半径和,那就是不碰撞
否则就是碰撞了,在[0,三分结果]二分就能得到刚好相切的时刻
附本题代码
————————————————————————————————————————————
1 | # include <bits/stdc++.h> |
E Simple Database
————————————————————————————————————————————
一个大模拟,没有卡复杂度之类的,但是模拟 SQL 也是很复杂的,有时间补上
F Training Plan
————————————————————————————————————————————
水 dp,队友出的,过会儿补上
G Certain Maze
————————————————————————————————————————————
这个题很有意思,初看的时候没有什么想法,就想,要是像往常那样的 n*m 图 bfs 就好了,怎么搞了呢?
于是想到我将这个图按照原本的规则建立一个正常一点的图不就好了么。
然后将一个/\ 变成了 3*3 的方阵里的对角线,刚好能满足。
附本题代码
————————————————————————————————————————————
1 | # include <bits/stdc++.h> |
H Random Maze
————————————————————————————————————————————
I Cactus Exploration
————————————————————————————————————————————
J Whalyzh's Problem
————————————————————————————————————————————
K ACM Battle
————————————————————————————————————————————
其实重点就是那个 10 滴上面,所以只要对边爆搜即可,滴过得边就不用在滴,如果滴的大于 10 个就 return
附本题代码
————————————————————————————————————————————
1 | # include <bits/stdc++.h> |


