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 ...
随机推荐
- September 30th 2016 Week 40th Friday
Elegance is the only beauty that never fades. 优雅是唯一不会褪色的美. Even the most beautiful apperance may los ...
- 【转】深入Windows内核——C++中的消息机制
上节讲了消息的相关概念,本文将进一步聊聊C++中的消息机制. 从简单例子探析核心原理 在讲之前,我们先看一个简单例子:创建一个窗口和两个按钮,用来控制窗口的背景颜色.其效果 图1.效果图 Win32 ...
- Android错误:Re-installation failed due to different application signatures
Re-installation failed due to different application signatures (2013-04-20 14:27:32) 转载▼ 标签: 解决方法 问题 ...
- vector< vector<int> >类似于二维数组
vector< vector<int> > intVV; vector<int> intV; int i,j; ;i<;++i){ intV.clear(); ...
- C#回顾 – 4.IEnumerable 集合
- HTML5学习之视频与音频(三)
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- 使用RMAN DUPLICATE...FROM ACTIVE DATABASE创建物理standby database
Applies to: Oracle Server - Enterprise Edition - Version 11.1.0.6 to 11.2.0.4 [Release 11.1 to 11.2] ...
- 华为Mate8 NFC 时好时坏,怎么解决呢?
拿起手机朝桌子上磕几下,nfc就好用了.这是花粉总结的,我也试过,很灵.注意要带套,摄像头朝下,头部低一点往下磕.因为nfc芯片在头部,估计是接触不良.
- PHP日期操作类代码-农历-阳历转换、闰年、计算天数等
<?php class Lunar { var $MIN_YEAR = 1891; var $MAX_YEAR = 2100; var $lunarInfo = array( array(0,2 ...
- Parallel.js初探续集
@author mrbean 例子均来源于github parallel.js 昨天写的第一篇今天一看居然有50+的阅读量了,感觉很激动啊,但是也有点害怕毕竟这只是自己笔记性质的一点东西,所以赶紧拿起 ...