关闭
当前搜索:

[AtCoder ARC076 .F] [二分图] [霍尔定理] Exhausted?

题意:地上1到m个位置摆上椅子,有n个人要就座,每个人都有座位癖好:选择位置小于等于L或者大于等于R的位置。问至少需要添加多少个椅子能让所有人坐满。 解法:显然将一个人和他能坐的所有椅子连边,形成一个二分图,若椅子不够,即使存在完美匹配,也不能使所有人就坐,故椅子数至少要为n,答案初始化 max(0,n-m)。 当椅子数大于等于人数时,存在完美匹配代表每个人都能就座,由霍尔定理,要存在完美匹配...
阅读(61) 评论(0)

hdu 5582 Journey of Taku

题解参考:点击打开链接 首先如果Taku使用了第二种魔法,那么有K步的移动是可以确定的,于是我们记录每条边走完后, 通过第一种魔法下一步是哪条边,这样可以倍增算出K步后在哪儿,于是可以直接建图,求最短路即可。 重要的话一定要加粗说!**答案会爆int,另外题意有毒!** 倍增的是边: #include using namespace std; typedef pair pli; co...
阅读(37) 评论(0)

codeforces 100959B Airports 曼哈顿距离最大生成树

写了两种做法。 1. 对于每个点,向八个象限建最长边,注意最长边没有最短边的对称性,故每个点不能只枚举4个方向,要8个方向都枚举。这个做法速度较快,用的树状数组: #include using namespace std; typedef pair pii; const int maxn=100005; const int inf=2e9+1; int n,pos[maxn],f[maxn]...
阅读(108) 评论(0)

BZOJ 2177 最小曼哈顿生成树

留板。 #include using namespace std; typedef pair pii; const int maxn=100005; const long long inf=0x3f3f3f3f3f3f3f3f; int n,pos[maxn],f[maxn]; long long bit[maxn],res,x,y; struct edge { int u,v; ...
阅读(62) 评论(0)

Atcoder Regular Contest 080 CDEF

C - 4-adjacent 轻量级分类讨论 #include using namespace std; int n,cnt1,cnt2,cnt4,x; int main() { scanf("%d",&n); while (n--) { scanf("%d",&x); if (x%2!=0) ++cnt1; ...
阅读(71) 评论(0)

2017"百度之星"程序设计大赛 - 初赛(A)

1001 p-1的因子个数。 #include using namespace std; int T,P; int check(int x) { int ret=0; for (int i=1;i*i<=x;++i) { if (x%i==0) { ++ret; if (x/i!=i) ...
阅读(172) 评论(1)

codeforces 838D D. Airplane Arrangements 构造法 推公式

题意:航空公司卖机票。飞机座位是1~n的,卖m张票,m小于等于n,每张票上有三个信息,票号 i,座位号 j,登机入口 k,登机入口指的是从机头进入或者是从机尾进入。 乘客登飞机规则: 1. 乘客按照机票的编号从小到大依次登机。 2. 乘客登飞机时,从票上指定的入口进入,径直走到自己的位置处,如果有人,就看下一个位置有没有人,直到找到第一个空座位,便入座,如果一直走到头都没有位置,该乘客就会暴...
阅读(175) 评论(1)

Codeforces 838E E. Convex Countour DP

题意:给一个凸包,保证任意三点不共线(这个条件好像没什么用)。让在凸包上求一条最长路,要求不能经过重复的点,且路径不能自交。点与点的距离按欧氏距离算。 点数为2500数量级,输入的点按顺时针顺序排好(就是不用求凸包了)。 解法:比赛的时候马上莽了一发贪心,枚举起点和两个起始方向,折线地走到终点,交了结果 wa 2,dp只想到了n^3的,于是就去弄第二题线段树了。 正解:易知该路径经过...
阅读(121) 评论(0)

F. Madness Codeforces 822F 贪心 构造

解法:其实也算不上什么构造,将每条边看成每条路径就是最优的情况,每个点的秒表最大时间都是deg_i/2,deg_i为该点的度,这样一来答案就是唯一的,字典序什么的都是唬人的。难点在于如何把放起始点的代码写得简洁,dfs一遍,维护方向和离该点的距离即可。 #include using namespace std; const int maxn=105; const double eps=...
阅读(128) 评论(0)

Codeforces Round #422 (Div. 2) E. Liar 贪心 dp 后缀数组

给两个串,a与b,长度1e5,最多可以在a中选出x段互不相交的连续子串,问能不能拼成b,x的范围最多为30。 解法: 可以想到dp,dp[i][j]表示a串前j个字符取 i 段,能匹配到b串的最大前缀。这个状态是通过贪心构造的。 转移的时候也是贪心转移,分为多一段和不要这个字符两种情况。 a) 多一段:dp[i+1][j+lcp(a[j],b[dp[i][j]])]=max(dp[i+1]...
阅读(292) 评论(0)

UOJ #35. BZOJ 1031 后缀排序 后缀数组模板

真-模板题系列。板子直接用了sort,O(n*logn*logn)的,将就着T吧。 #include using namespace std; const int maxn=100005; string s; int n,K,Rank[maxn],tmp[maxn],sa[maxn],lcp[maxn]; inline bool compare_sa(int i,int j) { if...
阅读(128) 评论(0)

HDU 6065 RXD, tree and sequence DP 减少转移情况

给一颗有根树,根节点为1,再给定一个排列,长度为n,要求将排列切分成K段,定义每段的价值为该排列所有点及两两点之间lca中最浅节点的深度。要求输出K段区间所有可能的价值和中的最小值。n*K 解法: 很明显可以往dp方向思考。定义dp[i][j]为前i位切分成j段的价值和的最小值。在列出转移方程前,先说明观察到的若干性质: 性质1. 定义“一段排列所有点及两两点之间lca中最浅节点的深度”为T...
阅读(468) 评论(1)

HDU 6059 Kanade's trio 字典树

给n个数,要求(i,j,k)的对数,满足ai xor aj 解法:还是欠缺了一些 counting 的姿势啊,比赛的时候想错了,写了个假算法。 T有20组,n的范围是5e5,考虑O(n)或者O(nlog x)形式的算法。发现,通过字典树,可以枚举j,对每个j,用O(log MAX_INT)的时间复杂度求出i与k的对数。 如何求i与k的对数呢?可以从高到低枚举 aj 的每一位。如果该位为1,...
阅读(458) 评论(2)

HDU 6046 hash 哈希

用随机生成函数生成一个1e6的0/1矩阵,给定一个1e3的0/1矩阵,要求输出该矩阵在原矩阵中的位置。题目保证小矩阵一定是大矩阵的一部分。 解法:这题很显然是让我们思考如何在时限内配到该矩阵。一个常用的思路是处理小矩阵每个(x, y)位置的键值,全部放到哈希表中(代码里用的是 1*64 的二进制数存每个键值)。这种方法在DNA序列匹配中经常用到,即k-mer。这样,1e6的大矩阵中,只需要匹配大...
阅读(233) 评论(0)

H. Zé Coquinho, the sculptor 计数 括号题 2010 USP Try-outs

题意:输入n,K,求第K大的非法括号序列,若没有第K大,输出-1。题目保证运算的数据都在long long范围内。 解法: 1. 如果n为奇数,那么所有的序列都是非法的,令右括号为二进制1,左括号为二进制0,从高位往低位决定每一位是左括号还是右括号。其实输出的就是K的二进制表示。 2. 如果n为偶数,同上一题,还是从高位往低位决定前缀是什么,从而确定每一位是左括号还是右括号,只是这次在求一个...
阅读(280) 评论(0)
65条 共5页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:12727次
    • 积分:805
    • 等级:
    • 排名:千里之外
    • 原创:65篇
    • 转载:0篇
    • 译文:0篇
    • 评论:13条
    文章分类
    最新评论