【BestCoder 1st Anniversary】

AB题都是签到题。。。。

C

题意:

有一串数列,An=3*n*(n-1)+1

然后要从A数列中选取尽量少个数(可重复),使得Sum(An)=m

题解:

贪心地想,能拿大就拿大很明显就是错的。。。【哪里明显了。。。【反正就是错的

然后3*n*(n-1)+1=6*n*(n-1)/2+1,而n*(n-1)/2是三角形数,任意一个自然数最多只需要3个三角形数即可表示

所以设m是由k个数组成的,m=Sum(3*n*(n-1)+1)=6*(k个三角形数之和)+k

所以我们分情况来看:假如k=1和2则直接求,k>=3时只要m-k mod 6==0就找到解

D

题意:

给一个二分图,求最多加几条边就能变成完全二分图。不允许有重边。

题解:

首先,完全二分图是指第一个点集中的所有顶点都与第二个点集中的所有顶点相连的二分图。自己跑去百度才知道的。。。

那么完全二分图的边数就为N*M,其中N和M是两点集的顶点数。我们要做的就是使N*M最大。N+M已知嘛那么N-M越小越好嘛……

首先,对于原图中的一个联通块,我们黑白染色,同色的只能分到同一个点集

然后,DP[i][g]表示前i个联通块能否选取得到大小为g的点集,N^2的转移。。。

N多大?10000。。。。

优化?还想不出咧。。

E

题意:

一棵树,N个点,每个点有个权值。假如一条路径经过的点的Max-Min<=D的话这条路径即为合法。求有多少条路径合法。

题解:

出题人的做法是点分治, 比赛的时候有人排序之后用lct维护单调性过了.

设分治中心为g, 我们只需要计算跨过g的答案, 其他的可以分治计算.

跨过根的可以容斥做, 没有限制的 - ∑端点落在同一颗子树上的. 上述两个过程是一样的, 于是只考虑没有限制的怎么做.

令xi,yi为i到g路径上的最大值和最小值. 我们按照xi排序, 然后枚举xi必选, 那么前面可选的xj,yj(j<i)必须要满足xi−d≤xj,xi−d≤yj, 由于xj≥yj, 只需要考虑xi−d≤yj. 于是只要枚举xi然后用树状数组统计答案即可. 复杂度是O(nlog2n).

事实上也是存在O(nlogn)的点分治做法, 分治时每次把树差不多分成两半, 就可以利用单调性, 用单调队列维护答案. 做法和POI2010 Pilots类似. 这个做法在比赛开始后Claris想到的.

F

太神了不会不会。。。。。

签到题没FST!!!

时间: 2024-08-10 02:08:42

【BestCoder 1st Anniversary】的相关文章

BestCoder 1st Anniversary($) 1003 Sequence

题目传送门 1 /* 2 官方题解: 3 这个题看上去是一个贪心, 但是这个贪心显然是错的. 4 事实上这道题目很简单, 先判断1个是否可以, 然后判断2个是否可以. 之后找到最小的k(k>2), 使得(m-k)mod6=0即可. 5 证明如下: 6 3n(n-1)+1=6(n*(n-1)/2)+1, 注意到n*(n-1)/2是三角形数, 任意一个自然数最多只需要3个三角形数即可表示. 7 枚举需要k个, 那么显然m=6(k个三角形数的和)+k, 由于k≥3, 只要m?k是6的倍数就一定是有解的

hdu 5311 Hidden String (BestCoder 1st Anniversary ($))(深搜)

http://acm.hdu.edu.cn/showproblem.php?pid=5311 Hidden String Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 1499    Accepted Submission(s): 534 Problem Description Today is the 1st anniversar

BestCoder 1st Anniversary ($) 1001 Souvenir

Souvenir Accepts: 901 Submissions: 2743 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Problem Description Today is the 1st anniversary of BestCoder. Soda, the contest manager, wants to buy a souvenir for each cont

BestCoder 1st Anniversary ($) 题解

Souvenir 问题描述 今天是BestCoder一周年纪念日. 比赛管理员Soda想要给每个参赛者准备一个纪念品. 商店里纪念品的单价是p元, 同时也可以花q元购买纪念品套装, 一个套装里有m个纪念品. 今天总共有n个参赛者, Soda想要知道最少需要花多少钱才可以给每个人都准备一个纪念品. 输入描述 输入有多组数据. 第一行有一个整数T (1≤T≤105), 表示测试数据组数. 然后对于每组数据: 一行包含4个整数 n,m,p,q (1≤n,m,p,q≤104). 输出描述 对于每组数据输

BestCoder 1st Anniversary

problem 1001 Souvenir Accepts: 901 Submissions: 2743 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) 问题描述 今天是BestCoder一周年纪念日. 比赛管理员Soda想要给每个参赛者准备一个纪念品. 商店里纪念品的单价是p元, 同时也可以花q元购买纪念品套装, 一个套装里有mm个纪念品. 今天总共有nn个参赛者, Soda想

BestCoder 1st Anniversary ($) 1002.Hidden String

Hidden String Accepts: 437 Submissions: 2174 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) 问题描写叙述 今天是BestCoder一周年纪念日. 比赛管理员Soda有一个长度为的字符串. 他想要知道是否能找到的三个互不相交的子串, , 满足下列条件: 1. 2. , , 依次连接之后得到字符串"anniversary". 输

BestCoder 1st Anniversary ($) Hidden String(深搜)

题意:给一个字符串s,问s中先后出现的三个子串是否能组成"anniversary" 解析:深搜,搜的层次小于等于三而且找到完整字符"anniversary"即正确,否则错误   #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; const int maxn = 1e6; char s[1

BestCoder 1st Anniversary 1002-1005

1002 Hidden String 这个题怎么暴力怎么搞就好了. 可以枚举最长匹配前缀, 和最长匹配后缀, 中间暴力for. 1 /*Author :usedrose */ 2 /*Created Time :2015/7/25 19:05:28*/ 3 /*File Name :2.cpp*/ 4 #include <cstdio> 5 #include <iostream> 6 #include <algorithm> 7 #include <sstream

HDU 5312 Sequence(三角形数应用)——BestCoder 1st Anniversary ($)

传送门 Sequence Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 1424    Accepted Submission(s): 442 Problem Description Today, Soda has learned a sequence whose n-th (n≥1) item is 3n(n?1)+1. Now