Hihocoder 1259 :A Math Problem(2015 北京区域赛 K,二进制的数位dp)
来源:互联网 发布:编程智能机器人玩具 编辑:程序博客网 时间:2024/06/05 20:23
提交传送门:Hihocoder 1259 :A Math Problem
题意传送门:UVA Live 7271 A Math Problem
题意:f[1]=1,3∗f[n]∗(f[2∗n]+1)=f[2∗n]∗(1+3∗f[n]),f[2∗n]<6∗f[n],
定义g[t]为f[i]%k==t的i的个数,
求g[0]∧g[1]∧g[2]∧...∧g[k−1]
思路:可以推出f[2∗n]=f[n]∗3,f[2∗n+1]=f[n]∗3+1,
而f[n]=sta[x]∗3x+sta[x−1]∗3(x−1)+...+sta[0]∗30,sta[0]表示每一位可以为0或者1
然后利用数位dp就好了
#include<cstdio>#include<algorithm>#include<cstring>using namespace std;long long num[66537],dp[65][66537],P[65],n,tmp[65][66537];int dig[100],sz;bool vis[100];int k;void dfs(int pos,int remain,int limit){ if(pos<0){ num[remain]++; return ; } if(!limit&&vis[pos]){ int rr=remain*P[pos+1]%k; for(int i=0;i<k;i++) num[ (rr+i)%k ]+=dp[pos][i]; return ; } int now=sz; if(!limit) ++sz,memcpy(tmp[now],num,k*sizeof(long long)); int last=(limit==0 ? 1:dig[pos]); for(int i=0;i<=last;i++) dfs(pos-1,(remain*3+i)%k,limit && (i==last) ); if(!limit){ vis[pos]=true; for(int i=0;i<k;i++) dp[pos][i]=num[i]-tmp[now][i]; }}void solve(long long m){ int ed=0; for(int i=0;i<=63;i++){ if((1LL<<i)&m) ed=i,dig[i]=1; else dig[i]=0; } dfs(ed,0,1);}int main(){ int _; scanf("%d",&_); while(_--){ scanf("%lld%d",&n,&k); memset(vis,false,sizeof(vis)); memset(num,0,sizeof(num)); memset(dp,0,k*sizeof(long long)); memset(tmp,0,k*sizeof(long long)); P[0]=1,sz=0; for(int i=1;i<=64;i++) P[i]=P[i-1]*3%k; solve(n); long long ans=0; num[0]--; for(int i=0;i<k;i++) ans^=num[i]; printf("%lld\n",ans); } return 0;}
0 0
- Hihocoder 1259 :A Math Problem(2015 北京区域赛 K,二进制的数位dp)
- 2015ICPC北京区域赛K. A Math Problem(数位DP)
- hihoCoder 1259 A Math Problem 数位dp
- hihoCoder 1259 A Math Problem 数位dp
- 2015北京现场赛 Hihocoder 1259 :A Math Problem
- hihoCoder 1259 A Math Problem(数位dp)
- Hihocoder 1259 A Math Problem(数位DP+公式推导)
- 2015ACM-ICPC 北京赛区 Problem K. A Math Problem
- 2015 北京区域赛 K 二叉树乱搞(数位dp 误)
- 2015 北京现场赛 A Math Problem
- uvalive7271(A Math Problem) 数位dp
- UVALive - 7271 A Math Problem (hihocoder 1259)
- hdu 5435 A serious math problem(数位dp)
- hdu 5435 A serious math problem 数位dp
- UVALive 7271 A Math Problem 【数位dp计数】
- hihocoder 1257 2015北京区域赛I
- hihoCode 1249 A Math Problem ACM/ICPC 2015 Beijing (数位dp+规律)
- hihocoder 1259 (数位DP)
- JZOJ 4685 礼物【NOIP2016提高A组8.12】
- HDU 1233 还是畅通工程(kruskal&&prim)
- 为什么要用存储过程?
- Sublime text 2 离线安装简要说明及安装包链接
- put: Cannot create file/database/test/asoku_us_2016-07-13._COPYING_. Name node is in safe mode.
- Hihocoder 1259 :A Math Problem(2015 北京区域赛 K,二进制的数位dp)
- Servlet---对网页,Java,及数据库技术整合的理解(J2EE)
- codefoces 706C Hard problem (dp/dfs)
- SVN 导出代码在VS2012运行提示“未能将网站xx 配置为使用 ASP.NET 4.0,为了使此网站正确运行,您必须将它手动配置为使用 ASP.NET 4.0”
- 优化1——数据库优化面试题
- 常见化学物质(二)
- 笔记:使用WDS批量安装win10,附有Enterprise无人值守应答文件
- redis之三的链表
- HDU1850(博弈论,Being a Good Boy in Spring Festival)