本文共 1740 字,大约阅读时间需要 5 分钟。
1、
2、题目
In the New Year 2014, Xiao Ming is thinking about the question: give two integers Nand K, Calculate the number of the numbers of satisfy the following conditions:
1. It is a positive integer and is not greater than N.
2. Xor value of its all digital is K.
For example N = 12, K = 3, the number of satisfy condition is 3 and 12(3 = 3, 1 ^ 2 = 3).
In order to let Xiao Ming happy in the New Year 2014, can you help him?
12 3999 512354 8
276662
无
宁静致远 @HBMY
3、比赛标程
简单的数位DP, dp[pos][statu] (statu 为异或值)!
本题有个trick, k等于0的时候要将答案减一(题目中要求数都为正的).#include#include #include using namespace std;#define lint long longint bit[30];lint dp[30][20];lint dfs(int pos,int x,bool limit){ if(pos<0) { if(limit)return 0; else return x==0; } if(!limit&&dp[pos][x]!=-1)return dp[pos][x]; int end=(limit==0)?9:bit[pos]; lint ans=0; for(int i=0;i<=end;++i) { ans+=dfs(pos-1,i^x,limit&&(i==end)); } dp[pos][x]=ans; return ans;}lint solve(lint n,int x){ int len=-1; memset(dp,-1,sizeof(dp)); while(n) { bit[++len]=n%10; n/=10; } return dfs(len,x,1);}int main(){ //freopen("G:\\1.in","r",stdin); //freopen("G:\\1.out","w",stdout); lint n,x; while(cin>>n>>x) { if(x>15) { puts("0"); continue; } lint ans=solve(n+1,x); if(x==0)--ans; printf("%lld\n",ans); } return 0;}
转载地址:http://pgddi.baihongyu.com/