contesthunter CH Round #64 - MFOI杯水题欢乐赛day1 solve
http://www.contesthunter.org/contest/CH Round %2364 - MFOI杯水题欢乐赛 day1/Solve
Solve
CH Round #64 - MFOI杯水题欢乐赛 day1
题目描述
给定 n 和 X0,X1,...,Xn-1,求解 Y0,Y1,...,Yn-1,其中:
f(x) 等于把 x 写成二进制后 1 的个数,比如说:
f(0)=0 , f(1)=1 , f(4)=1 , f(7)=3
其中 表示二进制下的按位异或运算。
请依次输出 Y0,Y1,...,Yn-1 对 取模的结果。
输入格式
输入第一行为一个正整数 n
输入第二行为 n 个非负整数,第 i 个数表示 Xi-1
输出格式
输出仅一行 n 个非负整数,第 i 个数表示 Yi-1 对 取模的结果。
样例输入
3 1 1 1
样例输出
2 3 3
数据范围及约定
| 测试数据点 | n | Xi | 特殊性质 |
| 1 | <= 10 | <= 10 | 无 |
| 2 | <= 100 | <= 100 | 无 |
| 3 | <= 1000 | <= 1000 | 无 |
| 4 | = 65536 | <= 109 | 所有 Ai 都相同 |
| 5 | <= 105 | <= 109 | 所有 Ai 都相同 |
| 6,7,8,9,10 | <= 105 | <= 109 | 无 |
分析:
方法1,
可以先预处理W[j][0/1] 表示第j位是0/1的i的i的Xi值和,然后对于每位i,根据其二进制表示来累加答案即可。
时间复杂度O(n log n) , 可以拿下全部测试点。
方法2.
考虑把n增加为2的幂,并令新增加的数字为0.
然后先把n == 2时转移矩阵写出来:
| 0 | 1 |
| 1 | 0 |
可以发现矩阵大概是这样的;
| A | A + T |
| A + T | A |
其中A的边长为2的幂,T为全1矩阵。
如果对于所有的边长为2的幂的矩阵,都能像这样分解的话,那么是不是就可以分治了?
首先,对于2 * 2 的矩阵来说,很显然是满足条件的。
假设对于2^k * 2 ^k的矩阵来说是满足条件的,那么考虑2 ^(k + 1) * 2 ^(k + 1)的矩阵,其左上角就是原来的2^k * 2 ^k的那个矩阵,设为A,显然对于所有的0 <= i < 2^k和0 <=j < 2 ^k,都有:
f((i+2k)⊕j)=f(i⊕j)+1
是不是说明其左上角的矩阵等于A + T ?
同理:右上角和右下角也是满足条件的。
于是就可以分治的去做了。
时间复杂度:O(n log n),可以拿下所有测试点。
AC代码:
代码很严谨,包括每个字符。。。orz
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; #define N 100000 + 5
#define Mod 1000000007 int n, W[][]; inline int getint()
{
char ch = '\n';
for (; ch != '-' && (ch > '' || ch < ''); ch = getchar()) ;
int f = ch == '-' ? - : ;
int res = ch == '-' ? : ch - '';
for (ch = getchar(); ch >= '' && ch <= ''; ch = getchar())
res = (res << ) + (res << ) + ch - '';
return res * f;
} inline int Inc(int a, int b)
{
return a + b - (a + b >= Mod ? Mod : );
} int main()
{
//#ifndef ONLINE_JUDGE
// freopen("solve.in", "r", stdin);
// freopen("solve.out", "w", stdout);
// #endif n = getint();
int d = (int) log2(n);
for (int i = ; i < n; i ++)
{
int t = getint();
for (int j = ; j <= d; j ++)
W[j][((i >> j) & )] = Inc(W[j][((i >> j) & )], t);
}
for (int i = ; i < n; i ++)
{
int res = ;
for (int j = ; j <= d; j ++)
res = Inc(res, W[j][((i >> j) + ) & ]);
printf("%d%c", res, (i == n - ) ? '\n' : ' ');
} // #ifndef ONLINE_JUDGE
// fclose(stdin);
// fclose(stdout);
// #endif
return ;
}
contesthunter CH Round #64 - MFOI杯水题欢乐赛day1 solve的更多相关文章
- CH Round #48 - Streaming #3 (NOIP模拟赛Day1)
A.数三角形 题目:http://www.contesthunter.org/contest/CH%20Round%20%2348%20-%20Streaming%20%233%20(NOIP模拟赛D ...
- 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...
- 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...
- 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...
- CH Round #54 - Streaming #5 (NOIP模拟赛Day1)
A.珠 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2354%20-%20Streaming%20%235%20(NOIP模拟赛Day1)/珠 题解:sb题, ...
- CH Round #54 - Streaming #5 (NOIP模拟赛Day1)解题报告
最近参加了很多CH上的比赛呢~Rating--了..题目各种跪烂.各种膜拜大神OTZZZ T1珠 描述 萌蛋有n颗珠子,每一颗珠子都写有一个数字.萌蛋把它们用线串成了环.我们称一个数字串是有趣的,当且 ...
- CH Round #54 - Streaming #5 (NOIP模拟赛Day1)(被虐瞎)
http://ch.ezoj.tk/contest/CH%20Round%20%2354%20-%20Streaming%20%235%20%28NOIP%E6%A8%A1%E6%8B%9F%E8%B ...
- CH Round #59 - OrzCC杯NOIP模拟赛day1
第一题:队爷的新书 题意简述:给定n个闭区间,求出一个数p使它与包含它的区间数的积最大,输出这个积. 分析:使用一个差分数组g,每个区间[l,r],l位置加1,r+1的位置减1,从前往后统计,得到对于 ...
- 【强联通分量缩点】【最长路】【spfa】CH Round #59 - OrzCC杯NOIP模拟赛day1 队爷的讲学计划
10分算法:对于城市网络为一条单向链的数据, 20分算法:对于n<=20的数据,暴力搜出所有的可能路径. 结合以上可以得到30分. 60分算法:分析题意可得使者会带着去的城市也就是这个城市所在强 ...
随机推荐
- url如何传递参数
$(document).ready(function() { var name=getQueryString('minename'); if (name != null && name ...
- web项目中 集合Spring&使用junit4测试Spring
web项目中 集合Spring 问题: 如果将 ApplicationContext applicationContext = new ClassPathXmlApplicationContext(& ...
- Linux进程间通信与线程间同步详解(全面详细)
引用:http://community.csdn.net/Expert/TopicView3.asp?id=4374496linux下进程间通信的几种主要手段简介: 1. 管道(Pipe)及有名管道( ...
- 1011 最大公约数GCD
1011 最大公约数GCD 基准时间限制:1 秒 空间限制:131072 KB 输入2个正整数A,B,求A与B的最大公约数. Input 2个数A,B,中间用空格隔开.(1<= A,B < ...
- 转:【工欲善其事必先利其器】—Entity Framework实例详解
开始本篇文章之前,先说一下Entity Framework 6 Alpha1在NuGet中已可用,原文链接http://blogs.msdn.com/b/adonet/archive/2012/10/ ...
- 在css中定义滚动条样式
1,Overflow内容溢出时的设置 overflow 水平及垂直方向内容溢出时的设置 overflow-x 水平方向内容溢出时的设置 overflow-y 垂直方向内容溢出时的设置 以上三个属性设置 ...
- IE6不支持position:fixed属性
_position:absolute; _bottom:auto; _top:expression(eval(document.documentElement.scrollTop+document.d ...
- UITabBar 设置字体的颜色(选中状态/正常状态)setTitleTextAttributes
UITabbar有个setTintColor这个方法,可以理解为,高亮的时候,或者点击后的颜色设置. UITabBarItem有个setTitleTextAttributes的方法,是用来设置字体的颜 ...
- http://www.cnblogs.com/java-my-life/archive/2012/05/28/2516865.html
http://www.cnblogs.com/java-my-life/archive/2012/05/28/2516865.html
- 利用utl_file来读取文件.
以前写过用external table来加载trace文件,详情参考下面链接. http://www.cnblogs.com/princessd8251/p/3779145.html 今天要做到是用U ...