HDU 6129 Just do it(杨辉三角+lucas \ 记忆化dp)
来源:互联网 发布:js push array[0] 问题 编辑:程序博客网 时间:2024/05/18 21:10
思路:
首先看这么一个图:(此图来自http://blog.csdn.net/qq_37412229/article/details/77231474)
然后我们就能发现每个数对应的系数其实是组合数,然后我们还发现这个杨辉三角跟坐标的对应关系。
设坐标为(x,y),那么对应的组合数为c(x+y-2,y-1)。
所以我们对于每一个奇数的组合数,计算每个a对于其他项的贡献。
#include<iostream>#include<cstdio>#include<queue>#include<cstring>#include<map>#include<cmath>//#define inf 0x3f3f3f3f#define inf 1e15#define eps 1e-6typedef long long int lli;using namespace std;const int maxn = 2e5+200;int dp[maxn];int ans[maxn];int main(){ int t,n,m; scanf("%d",&t); while(t--){ scanf("%d%d",&n,&m); for(int i = 1;i <= n;i++){ scanf("%d",&dp[i]); ans[i] = dp[i]; } for(int i = 1;i <= n;i++){ if(((m+i-1)&i)==i){ for(int j = i+1;j<=n;j++){ ans[j] ^= dp[j-i]; } } } for(int i = 1;i <= n;i++){ if(i!=1) printf(" "); printf("%d",ans[i]); } puts(""); } return 0;}
但要是这种方法的话很容易找到一个某一行全是奇数的数来卡你。。所以我觉得最差情况下会退化成o(n^2)。。
所以我队友就根据dp方程去跳。。
因为
同理,我们可知在2的整数次幂都可以这么跳,所以了对于一个数m,最多跳32次,所以我们开一个2e5
*32的数组就够了。
队友的代码(我还没用这种方法写,回头补):
#include <iostream>#include <stdio.h>using namespace std;typedef long long int lli;const int maxn = 2e5+9;lli a[maxn];lli ans[maxn][30];lli n,m;inline lli getans(const lli &i,const lli &j,int dep) { if(i == 0) return ans[j][dep] = a[j]; lli len = 1; while(len <= i) len<<=1; len>>=1; if(j-len<0) return ans[j][dep] = getans(i-len,j,dep+1); return ans[j][dep] = (ans[j-len][dep]^getans(i-len,j,dep+1));}int main(){ lli T; scanf("%lld",&T); while(T--) { scanf("%lld%lld",&n,&m); for(lli i=0;i<n;i++) { scanf("%lld",&a[i]); } for(lli i=0;i<n;i++) { if(i!=0) printf(" "); getans(m,i,0); printf("%lld",ans[i][0]); } printf("\n"); } return 0;}
阅读全文
0 0
- HDU 6129 Just do it(杨辉三角+lucas \ 记忆化dp)
- HDU 6129 Just do it【杨辉三角+思维+Lucas定理】
- 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(有点复杂的杨辉三角)
- 2017杭电多校第七场1010 Just do it(数论,杨辉三角)HDU 6129
- HDU 6129 Just do it【杨辉三角】【思维题】【好题】
- 2017多校联合第七场1010/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 6129Just do it
- HDU-6129 Just do it
- Java接口新特性
- CF——Codeforces Round #428 (Div. 2)C. Journey
- C++ 字符串分割
- usb协议
- js传参数的时候用[],而不是用.
- HDU 6129 Just do it(杨辉三角+lucas \ 记忆化dp)
- javaI的O
- 底部导航栏:利用viewpager实现Android底部标题栏
- reason: '-[__NSArrayM enqueue:]: unrecognized selector sent to instance 0x14d59dc0'
- 1009: [HNOI2008]GT考试
- PAT 1009 说反话
- c++ 函数返回引用
- C# 线程这个烦人的join
- Spring Boot 搭建以及集成 StringRedisTemplate