博弈 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的更多相关文章

  1. 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 ...

  2. Bestcoder round #65 && hdu 5592 ZYB's Premutation 线段树

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...

  3. BestCoder Round #65 hdu5591(尼姆博弈)

    ZYB's Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  4. BestCoder Round #65 hdu5590(水题)

    ZYB's Biology Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  5. hdu 5592 BestCoder Round #65(树状数组)

    题意: ZYB有一个排列PP,但他只记得PP中每个前缀区间的逆序对数,现在他要求你还原这个排列. (i,j)(i < j)(i,j)(i<j)被称为一对逆序对当且仅当A_i>A_jA ...

  6. hdu 5591 BestCoder Round #65(博弈)

    题意: 问题描述 ZYBZYB在远足中,和同学们玩了一个“数字炸弹”游戏:由主持人心里想一个在[1,N][1,N]中的数字XX,然后玩家们轮流猜一个数字,如果一个玩家恰好猜中XX则算负,否则主持人将告 ...

  7. BestCoder Round #65 (ZYB's Premutation)

    ZYB's Premutation Accepts: 220 Submissions: 983 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...

  8. BestCoder Round #65 (ZYB's Game)

    ZYB's Game Accepts: 672 Submissions: 1207 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536 ...

  9. BestCoder Round #65 (ZYB's Biology)

    ZYB's Biology Accepts: 848 Submissions: 1199 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 13 ...

随机推荐

  1. 回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。

    问题补充: “/Source”应用程序中的服务器错误. 回发或回调参数无效.在配置中使用 <pages enableEventValidation="true"/> 或 ...

  2. mongodb3.x版本用户管理方法

    db.auth() 作用:验证用户到数据库. 语法: db.auth( { user: <username>, pwd: <password>, mechanism: < ...

  3. 解决At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this log

    pom增加:<dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</art ...

  4. Swift - 文件目录路径获取及数据储存(Home目录,文档目录,缓存目录)

    iOS应用程序只能在自己的目录下进行文件的操作,不可以访问其他的存储空间,此区域被称为沙盒.   应用沙盒结构分析 1.应用程序包:包含了所有的资源文件和可执行文件 2.Documents:保存应用运 ...

  5. LeetCode : 287. Find the Duplicate Number

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAACRAAAAMMCAYAAAAhQhmZAAAMFGlDQ1BJQ0MgUHJvZmlsZQAASImVlw ...

  6. 两个viewport的故事(第一部分)

    原文:http://www.quirksmode.org/mobile/viewports.html 在这个迷你系列的文章里边我将会解释viewport,以及许多重要元素的宽度是如何工作的,比如< ...

  7. gitlab 建仓的流程

    repository:仓库 Git global setup: git config --global user.name "Administrator" git config - ...

  8. EasyUi–7.tab和datagrid和iframe的问题

    1. 多个tab切换,第2个不显示 动态添加tab Iframe页面的方法 展开 折叠 <script type="text/javascript"> $(functi ...

  9. Spring.Net的IOC入门

    1.构造器注入 namespace Spring.Net { class Program { //构造器注入 static void Main(string[] args) { IApplicatio ...

  10. Pyqt Smtplib实现Qthread多线程发送邮件

    一. smtplib 的介绍 smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])   SMTP类构造函数,表示与SMTP服务器之间的连接 ...