百度之星2014初赛第二场

A. Scenic
Popularity

http://acm.hdu.edu.cn/showproblem.php?pid=4831

思路:景点区会控制休息区的Hot值,我们建立休息区到它最近的景点区的关系,注意处理冲突。

查询和修改都暴力进行,预处理关系,从左到右,然后从右到左遍历一遍即可,更新时候,从被修改的p位置,向两边,与p有关的休息区进行更新。总的时间复杂度O(T*n*K),10^8左右,不到1s可以解决。

const int maxn = 10000;
const int maxh = 100000;

struct node {
int pos; //位置
int hot; //hot值
bool isRest; //是否是休息区
int control[2]; //休息区所属的风景区下标
}elem[maxn];

void run() {
int t, n, p, v;
scanf("%d", &t);
FOR(Cas, 1, t) {
scanf("%d", &n);
FOR(i, 0, n - 1) {
scanf("%d%d", &p,&v);
elem[i].pos = p;
elem[i].hot = v;
elem[i].isRest = (v == 0) ? true : false;
memset(elem[i].control, -1, sizeof(elem[i].control));
}
//Left->Right
int lMark = -1;
FOR(i, 0, n - 1) {
if (!elem[i].isRest) {
lMark = i;
} else if (lMark != -1 && elem[i].isRest) {
elem[i].control[0] = lMark;
elem[i].hot = elem[lMark].hot;
}
}
//Right->Left
int rMark = -1;
FORD(i, n-1, 0) {
if (!elem[i].isRest) {
rMark = i;
} else if (rMark != -1 && elem[i].isRest) {

if (elem[i].control[0] == -1) {//未被控制的休息点
elem[i].control[0] = rMark;
elem[i].hot = elem[rMark].hot;
} else {
int lMark = elem[i].control[0];
int flag = abs(elem[rMark].pos - elem[i].pos) - abs(elem[lMark].pos - elem[i].pos);//flag 1:L -1:R 0:E
if (flag != 0) {
elem[i].control[0] = flag > 0 ? lMark : rMark;
elem[i].control[1] = -1;
elem[i].hot = elem[elem[i].control[0]].hot;
} else {
elem[i].control[0] = lMark;
elem[i].control[1] = rMark;
elem[i].hot = max(elem[lMark].hot, elem[rMark].hot);
}
}
}
}
//query
int query;
scanf("%d", &query);
printf("Case #%d:\n", Cas);
FOR(i, 1, query) {
char ch[10];
scanf("%s", ch);
if (!strcmp(ch, "Q")) {
scanf("%d", &v);
int ans = 0;
FOR(idx, 0, n - 1) {
if (elem[idx].hot <= v) ans++;
}
printf("%d\n", ans);
} else {
scanf("%d%d", &p, &v);
elem[p].hot = v;
int idx;
//Left update
for (idx = p - 1; idx >= 0 && elem[idx].isRest && ((elem[idx].control[0] == p) || (elem[idx].control[1] == p)); idx--) {
elem[idx].hot = elem[elem[idx].control[0]].hot;
if (elem[idx].control[1] != -1) {
elem[idx].hot = max(elem[idx].hot, elem[elem[idx].control[1]].hot);
}
}
//Right update
for (idx = p + 1; idx < n && elem[idx].isRest && ((elem[idx].control[0] == p) || (elem[idx].control[1] == p)); idx++) {
elem[idx].hot = elem[elem[idx].control[0]].hot;
if (elem[idx].control[1] != -1) {
elem[idx].hot = max(elem[idx].hot, elem[elem[idx].control[1]].hot);
}
}
}
}
}
}


View
Code

B.

C.

D. JZP Set

http://acm.hdu.edu.cn/showproblem.php?pid=4834

思路:定义要求的函数为g(n),
枚举前几项,然后OEIS,找到 http://oeis.org/A124197,

我们可以得到,g(n) = n + 1 + f(1)
+ f(2) + ... + f(n-1)

那么f(n) = f(n-1) +
h(n);

h(n)是整数n的奇数因子的个数,那么

h(n) =
d(n),n为奇数

h(n) = d(n) -
d(n/2),n为偶数

d(n)是整数n的因子个数。

使用打表,将整数n进行质因子分解,2^p1*3^p2*5*p3....,n的因子个数为(p1+1)(p2+1)(...),这里打一个素数表然后分解

得到d(n),就可以向上迭代得到g(n),n数据范围为10^7,最后结果注意要是64bit。注意因子分解时候进行时间优化,以及整体的空间优化。

const int maxn = 10000000;
int d[maxn + 5];
int64 f, g[maxn + 5];
int prime[maxn/5];
bool isPrime[maxn + 5];

void run()
{
int i, j;
isPrime[1] = isPrime[1] = 1;
for (i = 2; i <= maxn; ++i) {
if (!isPrime[i]) {
for (j = i + i; j <= maxn; j+=i) {
isPrime[j] = 1;
}
}
}

int cnt = 0;
for (i = 2; i <= maxn; i++) {
if (!isPrime[i])
prime[cnt++] = i;
}
d[1] = 1;
for (i = 2; i <= maxn; ++i) {
int val = i, ans = 1;
if (!isPrime[i]) d[i] = 2;
else {
for (j = 0; j < cnt; ++j) {
if (prime[j] > val) break;
int tmp = 0;
while (val % prime[j] == 0) {
tmp++;
val /= prime[j];
}
ans *= (tmp + 1);
if (!isPrime[val]) {
ans <<= 1;
break;
}
}
d[i] = ans;
}
}

f = 1;
g[1] = 2;
for (i = 2; i <= maxn; ++i) {
g[i] = g[i - 1] + f + 1;
f += ((i & 0x01) ? d[i] : (d[i] - d[i >> 1]));
}

int t, e;
scanf("%d", &t);
for (int nt = 1; nt <= t; ++nt) {
scanf("%d", &e);
printf("Case #%d:\n%I64d\n", nt, g[e]);
}

}

百度之星2014初赛第二场,布布扣,bubuko.com

时间: 2024-10-25 11:46:36

百度之星2014初赛第二场的相关文章

模拟-hdoj-4831-百度之星2014初赛第二场

Scenic Popularity Problem Description 临近节日,度度熊们最近计划到室外游玩公园,公园内部包括了很多的旅游景点区和休息区,由于旅游景点很热门,导致景点区和休息区都聚集了很多人.所以度度熊在旅游之前想通过百度地图查看一下公园内各个地方的热门程度. 假设所有景点区和休息区都是X轴直线上的一系列顶点,所对应的坐标Xi 保证唯一.每个景点区有个初始的热度值,而一个休息区(坐标为Xi)的热度值等于离它距离最近的景点区Xj的热度值(距离定义为|Xi-Xj|),如果此休息区

动态规划-hdoj-4832-百度之星2014初赛第二场

Chess Problem Description 小度和小良近期又迷上了下棋.棋盘一共同拥有N行M列,我们能够把左上角的格子定为(1,1),右下角的格子定为(N,M).在他们的规则中,"王"在棋盘上的走法遵循十字路线.也就是说,假设"王"当前在(x,y)点,小度在下一步能够移动到(x+1, y), (x-1, y), (x, y+1), (x, y-1), (x+2, y), (x-2, y), (x, y+2), (x, y-2) 这八个点中的随意一个. 小度觉

【百度之星2014~初赛(第二轮)解题报告】Chess

声明 笔者最近意外的发现 笔者的个人网站http://tiankonguse.com/ 的很多文章被其它网站转载,但是转载时未声明文章来源或参考自 http://tiankonguse.com/ 网站,因此,笔者添加此条声明. 郑重声明:这篇记录<[百度之星2014~初赛(第二轮)解题报告]Chess>转载自 http://tiankonguse.com/ 的这条记录:http://tiankonguse.com/record/record.php?id=667 前言 最近要毕业了,有半年没做

【百度之星2014~初赛(第二轮)解题报告】JZP Set

声明 笔者最近意外的发现 笔者的个人网站http://tiankonguse.com/ 的很多文章被其它网站转载,但是转载时未声明文章来源或参考自 http://tiankonguse.com/ 网站,因此,笔者添加此条声明. 郑重声明:这篇记录<[百度之星2014~初赛(第二轮)解题报告]JZP Set>转载自 http://tiankonguse.com/ 的这条记录:http://tiankonguse.com/record/record.php?id=668 前言 最近要毕业了,有半年

【百度之星2014~初赛解题报告】

声明 笔者最近意外的发现 笔者的个人网站http://tiankonguse.com/ 的很多文章被其它网站转载,但是转载时未声明文章来源或参考自 http://tiankonguse.com/ 网站,因此,笔者添加此条声明. 郑重声明:这篇记录<[百度之星2014~初赛解题报告]>转载自 http://tiankonguse.com/ 的这条记录:http://tiankonguse.com/record/record.php?id=671 前言 最近要毕业了,有半年没做比赛了.这次参加百度

百度之星2014初赛 - 1002 - Grids

先上题目: Grids Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submission(s): 0    Accepted Submission(s): 0 Problem Description 度度熊最近很喜欢玩游戏.这一天他在纸上画了一个2行N列的长方形格子.他想把1到2N这些数依次放进去,但是为了使格子看起来优美,他想找到使每行每列都递增的方案.不过画

2014百度之星初赛(第二场)——Best Financing

2014百度之星初赛(第二场)--Best Financing Problem Description 小A想通过合理投资银行理财产品达到收益最大化.已知小A在未来一段时间中的收入情况,描述为两个长度为n的整数数组dates和earnings,表示在第dates[i]天小A收入earnings[i]元(0<=i<n).银行推出的理财产品均为周期和收益确定的,可描述为长度为m的三个整数数组start.finish和interest_rates, 若购买理财产品i(0<=i<m),需要

2014百度之星初赛(第二场)——JZP Set

2014百度之星初赛(第二场)--JZP Set Problem Description 一个{1, ..., n}的子集S被称为JZP集,当且仅当对于任意S中的两个数x,y,若(x+y)/2为整数,那么(x+y)/2也属于S. 例如,n=3,S={1,3}不是JZP集,因为(1+3)/2=2不属于S.但是{1,2,3}的其他子集都属于S,所以n=3时有7个JZP集 给定n,求JZP集的个数. Input 第一行为T,表示输入数据组数. 每组数据包含一行整数n. 限制条件 1<=T<=10^5

2014百度之星初赛(第二场)——Chess

2014百度之星初赛(第二场)--Chess Problem Description 小度和小良最近又迷上了下棋.棋盘一共有N行M列,我们可以把左上角的格子定为(1,1),右下角的格子定为(N,M).在他们的规则中,"王"在棋盘上的走法遵循十字路线.也就是说,如果"王"当前在(x,y)点,小度在下一步可以移动到(x+1, y), (x-1, y), (x, y+1), (x, y-1), (x+2, y), (x-2, y), (x, y+2), (x, y-2)