HDU 6129 Just do it(机智)
2017-09-26 16:12
363 查看
Description
给出一个序列a1,2,...,n,每次操作对该序列求一遍异或前缀和,问m次操作后的序列
Input
第一行一整数T表示用例组数,每组用例首先输入两个整数n和m分别表示序列长度和操作数,之后输入n个整数a1,2,...,n(1≤T≤5,1≤n≤2⋅105,1≤m≤109,0≤ai≤230−1)
Output
输出m次操作后的序列
Sample Input
2
1 1
1
3 3
1 2 3
Sample Output
1
1 3 1
Solution
设m次操作后的序列为b1,2,...,n,类似杨辉三角知ai对bj的贡献为Cj−im−1+j−i,而使得Ckm−1+k为奇数的k并不多,故可以枚举k,如果Ckm−1+k为奇数则枚举i,ai对bi+k有贡献
注:Cmn为奇数当且仅当n&m=m
Code
给出一个序列a1,2,...,n,每次操作对该序列求一遍异或前缀和,问m次操作后的序列
Input
第一行一整数T表示用例组数,每组用例首先输入两个整数n和m分别表示序列长度和操作数,之后输入n个整数a1,2,...,n(1≤T≤5,1≤n≤2⋅105,1≤m≤109,0≤ai≤230−1)
Output
输出m次操作后的序列
Sample Input
2
1 1
1
3 3
1 2 3
Sample Output
1
1 3 1
Solution
设m次操作后的序列为b1,2,...,n,类似杨辉三角知ai对bj的贡献为Cj−im−1+j−i,而使得Ckm−1+k为奇数的k并不多,故可以枚举k,如果Ckm−1+k为奇数则枚举i,ai对bi+k有贡献
注:Cmn为奇数当且仅当n&m=m
Code
#include<cstdio> using namespace std; typedef long long ll; #define maxn 200005 int T,n,m,a[maxn],ans[maxn]; int C(int n,int m) { if((n&m)==m)return 1; return 0; } int main() { scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); for(int i=0;i<n;i++)scanf("%d",&a[i]),ans[i]=a[i]; for(int i=1;i<n;i++) if(C(m+i-1,i)) for(int j=0;j+i<n;j++) ans[j+i]^=a[j]; for(int i=0;i<n;i++)printf("%d%c",ans[i],i==n-1?'\n':' '); } return 0; }
相关文章推荐
- hdu 6129 Just do it(递推)
- 2017杭电多校第七场1010 Just do it(数论,杨辉三角)HDU 6129
- 【多校训练】hdu 6129 Just do it
- 2017多校第7场 HDU 6129 Just do it 找规律
- hdu 6129 Just do it(递推)
- HDU 6127 Hard challenge+HDU 6129 Just do it【2017多校联赛】
- HDU 6129 Just do it
- hdu 6129 Just do it(递推)
- hdu 6129 Just do it (杨辉三角)
- Hdu 6129 Just do it【杨辉三角、规律】
- 2017多校 Just do it (Hdu 6129)
- hdu 6129 Just do it(递推)
- HDU 6129 Just do it (组合数)
- Just do it(HDU 6129)
- hdu 6129 Just do it
- HDU 6129 Just do it
- hdu 6129 Just do it(递推)
- HDU 6129 Just do it(递推)
- hdu 6129 Just do it(杨辉三角)
- hdu 6129 Just do it(递推)