【Link】:http://acm.hdu.edu.cn/showproblem.php?pid=6129

【Description】



设定b【i】=a【1】^a【2】^a【3】^………………a【i】;

每进行一次,我们可以从a数组得到一个b数组。问进行m次的结果。

【Solution】



我们把前几轮的结果都写出来;

会发现,最后每一个位置ai的结果都是

t1@a1+t2@a2+…+ti@ai的形式.

这里的x@y表示x个y做异或运算.

t1是系数,它>=0

最后的ai的系数,是a[i+1]的后i项系数.

也就是说只要我们把an的t1到tn求出来就好了;



会发现有a[i][j] = a[i][j-1]+a[i-1][j]的规律..

这样就能打一张大表

然后就是找规律了。。

在OEIS上发现。。

第i列就是C(i+m-2,i-1);

t1..tn都能求出来了

我们不用知道这一项具体是什么;

只希望知道它的奇偶性就好。

(奇数就为1,否则为0);

有个结论.

当(n&m) == m的时候,C(n,m)的值才为奇数

这样就能根据t1..tn算出an了;

再根据最后的ai的系数,是a[i+1]的后i项系数进而可以算出a1..an-1

这里我只记录了ti为1的位置,且在做的时候把没用的位置删掉了.

这样避免了O(n^2)的复杂度.

因为当(n&m) == m的时候,C(n,m)的值才为奇数,可以想见最后系数为1的值是挺少的



【NumberOf WA】



1

(PE了一发,注意行末空格啊!!)



【Reviw】



OEIS帮了大忙.



【Code】

#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define ll long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x)
#define ri(x) scanf("%d",&x)
#define rl(x) scanf("%lld",&x)
#define rs(x) scanf("%s",x+1)
#define oi(x) printf("%d",x)
#define ol(x) printf("%lld",x)
#define oc putchar(' ')
#define os(x) printf(x)
#define all(x) x.begin(),x.end()
#define open() freopen("f:\\rush.txt","r",stdin)
#define close() ios::sync_with_stdio(0) typedef pair<int,int> pii;
typedef pair<ll,ll> pll; const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 2e5; int a[N+100],t,n,m,b[N+100];
vector <int> v; int c(int n,int m){
if ( (n&m) == m)
return 1;
else
return 0;
} int main(){
//open();
//close();
ri(t);
while (t--){
ri(n),ri(m);
rep1(i,1,n) ri(a[i]); v.clear();
for (int i = 1,j = n;i <= n;i++,j--){
int b;
if (i == 1)
b = 1;
else
if (i == 2) b = m&1;
else
if (i == 3) b = c(m+1,2);
else
if (i == 4) b = c(m+2,3);
else
b = c(m+i-2,i-1);
if (b==1) v.pb(j);
} rep2(i,n,1){
while ( (int) v.size()){
int k = v.back();
if (k-(n-i)<=0) {
v.pop_back();
continue;
}
break;
}
int len = v.size();
int temp = 0;
rep1(k,0,len-1){
int key = v[k];
int j = key -(n-i);
temp^=a[j];
}
b[i] = temp;
}
rep1(i,1,n) {
oi(b[i]);
if (i == n)
puts("");
else
oc;
}
}
return 0;
}

【2017 Multi-University Training Contest - Team 7】Just do it的更多相关文章

  1. 【2017 Multi-University Training Contest - Team 2】TrickGCD

    [Link]:http://acm.hdu.edu.cn/showproblem.php?pid=6053 [Description] 给你一个b数组,让你求一个a数组: 要求,该数组的每一位都小于等 ...

  2. 【2017 Multi-University Training Contest - Team 2】Maximum Sequence

    [Link]:http://acm.hdu.edu.cn/showproblem.php?pid=6047 [Description] 给你一个数列a和一个数列b; 只告诉你a的前n项各是什么; 然后 ...

  3. 【2017 Multi-University Training Contest - Team 2】 Regular polygon

    [Link]: [Description] 给你n个点整数点; 问你这n个点,能够组成多少个正多边形 [Solution] 整点只能构成正四边形. 则先把所有的边预处理出来; 枚举每某两条边为对角线的 ...

  4. 【2017 Multi-University Training Contest - Team 2】 Is Derek lying?

    [Link]: [Description] 两个人都做了完全一样的n道选择题,每道题都只有'A','B','C' 三个选项,,每道题答对的话得1分,答错不得分也不扣分,告诉你两个人全部n道题各自选的是 ...

  5. 【2017 Multi-University Training Contest - Team 5】Rikka with Competition

    [Link]: [Description] [Solution] 把所有人的能力从大到小排; 能力最大的肯定可能拿冠军; 然后一个一个地往后扫描; 一旦出现a[i-1]-a[i]>k; 则说明从 ...

  6. 【2017 Multi-University Training Contest - Team 5】Rikka with Subset

    [Link]: [Description] 给你a数组的n个数的所有2^n个子集的2^n个子集元素的和; 子集元素的和最大为m; 告诉你各个子集元素的和出现的次数; 如 1 2 则0出现1次,1出现1 ...

  7. 【2017 Multi-University Training Contest - Team 5】Rikka with Graph

    [Link]:http://acm.hdu.edu.cn/showproblem.php?pid=6090 [Description] 给你n个点; 让你在这n个点上最多连m条无向边; 使得 ∑ni= ...

  8. 【2017 Multi-University Training Contest - Team 4】Time To Get Up

    [Link]: [Description] [Solution] 把每个数字长什么样存到数组里就好;傻逼题. (直接输入每一行是什么样子更快,不要一个字符一个字符地输入) [NumberOf WA] ...

  9. 【2017 Multi-University Training Contest - Team 4】Counting Divisors

    [Link]:http://acm.hdu.edu.cn/showproblem.php?pid=6069 [Description] 定义d(i)为数字i的因子个数; 求∑rld(ik) 其中l,r ...

  10. 【2017 Multi-University Training Contest - Team 3】RXD and math

    [Link]: [Description] [Solution] 发现1010mod(109+7)=999999937; 猜测答案是nk 写个快速幂; 注意对底数先取模; [NumberOf WA] ...

随机推荐

  1. [Java][log4j]支持同一时候按日期和文件大小切割日志

    依据DailyRollingFileAppender和RollingFileAppender改编,支持按日期和文件大小切割日志.  源文件: package com.bao.logging; impo ...

  2. vue.2.0-自定义全局组件

    App.vue <template> <div id="app"> <h3>welcome vue-loading</h3> < ...

  3. Zookeeper的单节点集群详细启动步骤

    这个很简单,见如下博客. 1 week110的zookeeper的安装 + zookeeper提供少量数据的存储 [hadoop@weekend110 zookeeper-3.4.6]$ pwd/ho ...

  4. DENON AVR-X510BT 功放设置记录

    http://manuals.denon.com/avrx510bt/ap/zh/index.php 环绕模式  : Direct:直接 Sttereo:立体声 Dolby PL  声音模式 电影 : ...

  5. 电脑无法上网,DHCP客户端不能正确获取IP地址

    问题特征:DHCP服务器更新[保留]配置信息后,给一客户端绑定了新的IP地址;但客户端IP地址并未正确更新; 处理: 一.检查DHCP服务器配置; 1.MAC地址.IP地址均正确;并已“添加到筛选器” ...

  6. 我在看着你呢——shiro学习

    说实话开学第一周效率并不高.项目该结的都差不多结了,看来这毛病我是养成了.项目忙的要死的时候,想休息想停一停就不断往下扔包袱.一下没项目了开学了,反倒开始手痒,捉摸着写点什么代码.马上我的小mac就要 ...

  7. JS中部分 Array 对象方法介绍

    1.concat() concat() 方法用于连接两个或多个数组.该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本 <script type="text/javascrip ...

  8. Activiti工作流框架学习(二)——使用Activiti提供的API完成流程操作

    可以在项目中加入log4j,将logj4.properties文件拷入到src目录下,这样框架执行的sql就可以输出到到控制台,log4j提供的日志级别有以下几种: Fatal  error  war ...

  9. Eclipse+PyDev解决中文输入和注释问题

    Eclipse的设置 window->preferences->general->editors->text editors->spelling->encoding ...

  10. android ActionBar的使用

    Action Bar主要功能包括:   1. 显示选项菜单   2. 提供标签页的切换方式的导航功能,能够切换多个fragment.    3.  提供下拉的导航条目.   4. 提供交互式活动视图取 ...