codeforces
NKWBTB
ACMer
展开
-
Codeforces Gym 100342J Triatrip Bitset+枚举
题目大意:给一个有向图(n<=1500),问有多少个三元环。做法: 用bitset保存每个点能到的点以及能到某个点的所有点 对每个点(记为U)逐一枚举,再枚举该点能到达的点(记为V) 将能到U点的bitset与V能到的点的bitset取交集,答案+=交集大小 最终答案÷3即可 时间复杂度O(n3)O(n^3),但是bitset将常数除以了32所以足够通过本题。 4543664 WHU_FFT原创 2015-09-06 10:50:01 · 823 阅读 · 0 评论 -
Codeforces Gym 100341I Hungry Queen 2 Set+模拟
题目大意:在一个无穷大的棋盘上有一个皇后在(0,0)点,皇后可以上下左右或者沿对角线移动。有n个卒,皇后要按卒的输入顺序吃卒,每次移动必须吃掉一个卒,皇后不能跳过卒。问皇后最多能吃掉几个卒?做法: 先将所有卒的位置(x、y、x+y、x-y)离散化; 用set分别记录,在同一行(按y排序)、同一列(按x排序)、同一对角线的卒; 模拟皇后的移动,每次在当前位置与下一个卒的位置所确定的set中查找下一个卒原创 2015-09-06 10:32:19 · 803 阅读 · 0 评论 -
Codeforces Gym 100342H Hard Test 构造
题目大意:你需要造一个n个点m条边的有向图,使得所有点都能被1访问到,且dijkstra算法在该图上更新次数最多。为避免麻烦,你的构造方案应当使得每次更新后没有vis的有最小的dis的点只有一个(dis和vis都是dijkstra算法中的意义)。 胡扯:这道题构造方法有很多种,我是用的最无脑的那一种做法: 注意到,要使得dijkstra更新次数最多,那么就是使得每一条边被枚举到的时候都进行一次有效更原创 2015-09-06 11:28:42 · 689 阅读 · 0 评论 -
Codeforces Gym 100342F Move to Front 平衡树
题目大意:有一个链表其中的元素为1->2->3->4->…….->INF,每次询问一个元素在链表中的位置,然后把该元素放到链表的首位置。做法:beta version 如果输入数字不大,那么我们可以直接先把1到最大数字打上时间戳加到平衡树(按时间戳从新到老排序)里面去; 每次询问,就询问时间戳在平衡树中的rank即可; 在平衡树中删除该时间戳,将该数重新打上一个新的时间戳加入到平衡树中即可(相当于移原创 2015-09-06 11:53:38 · 1313 阅读 · 0 评论 -
Codeforces Gym 100345H Settling the Universe Up Bitset+倒推
题目大意:给一个只从标号小的点向标号大的点连边的有向图(n<=200)。有如下几种操作: ? u v(询问u能否到v) + u v (加一条u到v的边) - u v (删除u到v的边) 以上操作保证u做法: 用bitset维护每个点能到的点 对于每一次?操作可以O(1)O(1)回答 对于每一次修改操作从后往前推暴力重构bitset并统计答案,时间复杂度O((n+m)∗n)O( (n+m)原创 2015-09-06 12:50:55 · 692 阅读 · 0 评论 -
Codeforces Gym 100345A BibTeX 模拟
题目大意:给一个BibTex的代码,要求你将引用格式化Sample:Input@book { author = “Donald Ervin Knuth”, title = “The Art of Computer Programming”, volume = “1”, publisher = “Addison-Wesley Professional”, year = “1997” }原创 2015-09-06 13:10:01 · 714 阅读 · 0 评论 -
Codeforces Gym 100203D Different vectors 最小表示法
题目大意:有一组序列,询问有能分成几组使得每一组中的序列都互成双射做法: 将每组序列接成环 把每一个元素替换成上一次该元素出现的位置与现在的位置的距离 将新的序列做一遍最小表示法 将最小表示的序列加到set中 最后答案即为set的大小 代码: 12548936 2015-08-15 17:29:14 NKWBTB D - Different vectors GNU C++原创 2015-09-06 14:11:46 · 763 阅读 · 0 评论 -
Codeforces Gym 100379L Game with a string 博弈+交互题
题目大意:有26堆石子,你可以选其中的若干堆取走每个选定堆中的一颗石子,没法取的人失败。你需要选择先手和后手,然后与程序交互,给出必胜的方案。做法: 我们先看只有一堆的情况,如果这一堆中的石子数为偶数,那么先手必败,反之如果是奇数,那么先手必胜; 我们可以推广到26堆的情况,如果不存在奇数堆的石子那么先手必败,否则先手必胜。 至此,我们得到了一个最优方案。如果不存在奇数堆的石子那么我们选则后手,否则原创 2015-09-06 14:31:17 · 2020 阅读 · 0 评论 -
Codeforces Gym 100971M Decomposition into Good Strings DP+数据结构
题目大意:定义有k个不同的字符的字符串为好字符串。现在给出一个字符串,求解对该字符串的每个前缀Si至少是多少个好字符串的连接,若不能由好字符串连接而成则输出-1。 例:k = 2 abac至少是ab和ac这两个好字符串的连接。 字符串长度<=2e5做法:一个比较直观的dp方程是这样的 f[i]表示Si的答案 f[i] = min(f[j] + 1) (j < i且Sj + 1…i是好字符串原创 2016-05-15 11:45:43 · 1136 阅读 · 0 评论