BestCoder Round #65
博弈 1002 ZYB's Game
题意:中文
分析:假定两个人是绝顶聪明的,一定会采取最优的策略.所以如果选择X的左边的一个点,那么后手应该选择X的右边对称的点,如果没有则必输,否则必胜,然后再分析下就是奇数是1,偶数是0
树状数组+二分(逆序数) 1003 ZYB's Premutation
题意:已知每个点前缀逆序对数和,求原排列
分析:可以得知每个点前面有几个比它大,那么用树状数组维护,二分查询从i到n有几个数字,那么答案是i-1
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int N = 5e4 + 5;
int A[N], B[N], a[N];
struct BIT {
int c[N], sz;
void init(int n) {
memset (c, 0, sizeof (c));
sz = n;
}
void updata(int i, int x) {
while (i <= sz) {
c[i] += x;
i += i & (-i);
}
}
int query(int i) {
int ret = 0;
while (i) {
ret += c[i];
i -= i & (-i);
}
return ret;
}
int bsearch(int l, int r, int k) {
int ret = 0, rr = r;
while (l <= r) {
int mid = (l + r) >> 1;
int cnt = query (rr) - query (mid);
if (cnt == k) {
ret = mid; r = mid - 1;
}
else if (cnt > k) l = mid + 1;
else r = mid - 1;
}
return ret;
}
}bit;
int n; int main(void) {
int T; scanf ("%d", &T);
while (T--) {
scanf ("%d", &n);
for (int i=1; i<=n; ++i) {
scanf ("%d", &A[i]);
}
B[0] = 0;
for (int i=2; i<=n; ++i) {
B[i] = A[i] - A[i-1];
}
bit.init (n);
for (int i=1; i<=n; ++i) {
bit.updata (i, 1);
}
for (int i=n; i>=1; --i) {
a[i] = bit.bsearch (1, n, B[i]);
bit.updata (a[i], -1);
}
for (int i=1; i<=n; ++i) {
printf ("%d%c", a[i], i == n ? '\n' : ' ');
}
} return 0;
}
树形DP 1004 ZYB's Tree
题意:一棵树,求所有点它到其他点的距离不大于K的个数的异或和
分析:dp[u][i] 表示u到子孙的距离为i的点的个数,dp[u][i+1] += dp[v][i].dp2[v][i] 表示v到上面的距离为i的点的个数,dp[v][i+1] += dp2[u][i] + dp[u][i] - dp[v][i-1]
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int N = 5e4 + 5;
int A[N], B[N], a[N];
struct BIT {
int c[N], sz;
void init(int n) {
memset (c, 0, sizeof (c));
sz = n;
}
void updata(int i, int x) {
while (i <= sz) {
c[i] += x;
i += i & (-i);
}
}
int query(int i) {
int ret = 0;
while (i) {
ret += c[i];
i -= i & (-i);
}
return ret;
}
int bsearch(int l, int r, int k) {
int ret = 0, rr = r;
while (l <= r) {
int mid = (l + r) >> 1;
int cnt = query (rr) - query (mid);
if (cnt == k) {
ret = mid; r = mid - 1;
}
else if (cnt > k) l = mid + 1;
else r = mid - 1;
}
return ret;
}
}bit;
int n; int main(void) {
int T; scanf ("%d", &T);
while (T--) {
scanf ("%d", &n);
for (int i=1; i<=n; ++i) {
scanf ("%d", &A[i]);
}
B[0] = 0;
for (int i=2; i<=n; ++i) {
B[i] = A[i] - A[i-1];
}
bit.init (n);
for (int i=1; i<=n; ++i) {
bit.updata (i, 1);
}
for (int i=n; i>=1; --i) {
a[i] = bit.bsearch (1, n, B[i]);
bit.updata (a[i], -1);
}
for (int i=1; i<=n; ++i) {
printf ("%d%c", a[i], i == n ? '\n' : ' ');
}
} return 0;
}
BestCoder Round #65的更多相关文章
- Bestcoder round #65 && hdu 5593 ZYB's Tree 树形dp
Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...
- Bestcoder round #65 && hdu 5592 ZYB's Premutation 线段树
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...
- BestCoder Round #65 hdu5591(尼姆博弈)
ZYB's Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- BestCoder Round #65 hdu5590(水题)
ZYB's Biology Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)T ...
- hdu 5592 BestCoder Round #65(树状数组)
题意: ZYB有一个排列PP,但他只记得PP中每个前缀区间的逆序对数,现在他要求你还原这个排列. (i,j)(i < j)(i,j)(i<j)被称为一对逆序对当且仅当A_i>A_jA ...
- hdu 5591 BestCoder Round #65(博弈)
题意: 问题描述 ZYBZYB在远足中,和同学们玩了一个“数字炸弹”游戏:由主持人心里想一个在[1,N][1,N]中的数字XX,然后玩家们轮流猜一个数字,如果一个玩家恰好猜中XX则算负,否则主持人将告 ...
- BestCoder Round #65 (ZYB's Premutation)
ZYB's Premutation Accepts: 220 Submissions: 983 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
- BestCoder Round #65 (ZYB's Game)
ZYB's Game Accepts: 672 Submissions: 1207 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536 ...
- BestCoder Round #65 (ZYB's Biology)
ZYB's Biology Accepts: 848 Submissions: 1199 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 13 ...
随机推荐
- C# 泛型约束
一.泛型简介1.1泛型通过使用泛型,可以创建这样的类.接口和方法,它们以一种类型安全的工作方式操作各种数据.本质上,术语“泛型”指的是“参数化类型”(parameterized types).参数化类 ...
- NYOJ题目436sum of all integer numbers
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAr0AAAHKCAIAAACBiWRrAAAgAElEQVR4nO3dP1LjSts34G8T5CyEFB
- JavaScript基础——定义变量
在JavaScript中使用变量来临时存储和访问来自JavaScript文件的数据.变量既可以指向简单的数据类型,如数字或者字符串:也可以指向更复杂的数据类型,比如对象. 在JavaScript中定义 ...
- DDR3详解(以Micron MT41J128M8 1Gb DDR3 SDRAM为例)
转自:http://www.360doc.com/content/14/0116/16/15528092_345730642.shtml 以及参考网络. 首先,我们先了解一下内存的大体结构工作流程,这 ...
- Server.MapPath查询路径那几件事
主要总结Server.MapPath 这个方法的使用以及使用的场景,不是什么时候都适合使用: 1.实现功能: Server.MapPath能够获取指定URL相对服务器的物理路径,在IIS服务端,能够根 ...
- Jquery自定义扩展方法(一)
jquery是一款流行的JS框架,自定义JS方法,封装到Jquery中,调用起来也挺方便的,怎么写Jquery扩展方法那,网上翻阅了一部分代码,其实也挺简单的: 方式一: (jQuery.fn.set ...
- java中常用的工具类(二)
下面继续分享java中常用的一些工具类,希望给大家带来帮助! 1.FtpUtil Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- HTML5+CSS3的响应式网页设计:自动适应屏幕宽度
这几天都在修改博客上面的样式.本来用的是d83.0的模板.自己又修改了许多地方,其中自己修改的一些地方在手机里面显示的效果不是很理想,于是想改成自适应的效果.对CSS3不是特别的熟练,只能去网上找找案 ...
- 跟着鸟哥学Linux系列笔记0-如何解决问题
跟着鸟哥学Linux系列笔记0-扫盲之概念 在发生问题怎么处理: 1. 在自己的主机.网络数据库上查询How-To或FAQ -Linux 自身的文件数据: /usr/share/doc -CLDP中 ...
- 不通过App Store实现ios应用分发下载安装
最近公司的项目准备着手宣传工作了,宣传手册上要印制App的下载地址二维码,但是客户端应用还未上线,需要一种临时的方案解决应用分发下载问题,通常ios应用必须通过苹果应用商店才能下载安装,但是也可以看到 ...