码迷,mamicode.com
首页 > 其他好文 > 详细

【zhx】endless【解题报告】

时间:2017-11-01 01:12:51      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:问题   space   奇数   img   include   进制   code   mda   分享   

终末

 

【问题描述】

 

你是能看到第二题的 friends 呢。

 

——laekov

 

没有尽头的世界之中,我们想知道0 − 中有多少个数在 进制下和−  进制下的表示方式一样。(举个例子,4的−3进制表示为4 = 121−3 = 1 × (−3)2 +

2 × (−3)1 + 1 × (−3)0

 

【输入格式】

一行两个整数 n,k 。

 

【输出格式】

 

一行一个整数代表答案。

 

【样例输入】

 

21 3

 

【样例输出】

 

9

 

【数据范围与规定】

对于40%的数据,n ≤ 1000。

对于另外30%的数据,k = 2

对于100%的数据,1 ≤ n≤ 1015, 2 ≤k ≤ 103

 

 

 

pdf转word好不靠谱...

我们先看一下部分分,对于40%的数据,我们可以从1到n枚举一下,判断每个数是否符合条件,具体操作是先转换成k进制数,然后假设(-k)进制数也是这个,乘回去变成原来的10进制,判断一下是否和以前的10进制相等即可。

对于k=2,我没有想到什么解法qwq

对于100%,我们可以先对于i拆成k和-k进制看看

i=a0*k^0+a1*k^1+a2*k^2+...+an*k^n

i=a0*(-k)^0+a1*(-k)^1+a2*(-k)^2+...+an*(-k)^n

那么两式相加

2*i=2*a0*k^0+2*a2*k^2+...+2*an*k^n(n%2=0)

 i=a0*k^0+a2*k^2+...+an*k^n(n%2=0)

那么可以看出a1,a3...这些项都为0。

那么我们就将n拆成k进制数(p[]),通过枚举每一位选什么处理即可。

那怎么处理呢,好像有很多种方法,我的方法大概是:

偶数位必须是0,奇数位依次枚举

对于拆成的k进制数长度为len,

如果len为偶数,那么他必须为0,那么其他的奇数位每一位有k种选择,乘起来即可

如果len为奇数,那么当最高位p[len]为p[len]-1及以下时,后面位是可以任意选的,记方案数为tem1

但当最高位选p[len]时,就对其他位有了一些限制,我们从高到低枚举,p数组偶数位有非0数,那么比他低的位数可以随意选择

不然的话只能在0--p[i]之间枚举,我们可以把他们(奇数位选择的上界)整体理解为一个新的k进制数x,另外

还有选择0的情况,所以最终的ans为tem1+x+1。

技术分享
 1 #include<bits/stdc++.h>
 2 #define ll long long
 3 using namespace std;
 4 ll n;
 5 int k,p[105],len;
 6 int main()
 7 {
 8     scanf("%I64d%d",&n,&k);
 9     while(n){
10         p[++len]=n%k;
11         n/=k;
12     }
13 //    for(int i=len;i>=1;i--)cout<<p[i];
14     ll ans=1;
15     for(int i=1;i<len;i++){
16         if(i&1)
17         ans*=k;
18     }
19     if(len&1)ans*=p[len];
20     ll tem=0,flag=0;
21     if(len&1)
22     for(int i=len-1;i>=1;i--){
23         if(i&1){
24             if(!flag){
25                 tem=tem*k+p[i];
26             }
27             else tem=tem*k+k-1;
28         }
29         else if(p[i])flag=1;
30     }
31     if(len&1)tem++;
32     printf("%I64d\n",ans+tem);
33     return 0;
34 }
ac代码

 

【zhx】endless【解题报告】

标签:问题   space   奇数   img   include   进制   code   mda   分享   

原文地址:http://www.cnblogs.com/Turkeyghb/p/7764396.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!