bzoj P1192
这题给的数据很大,所以暴力模拟肯定是不行的。。
dp也不行,数据范围达到了10^9,所以保存不了状态。。。
所以其实是道数学题,可以用简单的找规律来解决:
设f[i]为当m为i时的解,接下来开始手算:
f[1]=1,f[2]=2,f[3]=2,f[4]=3,f[5]=3,f[6]=3....
是不是看出了什么??
对于f[1],重复1的值1次
对于f[2],重复2的值2次
对于f[4],重复3的值3次
以此类推。。。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int m,i;
int main(){
scanf("%d",&m);
for(i=1;(1<<i)<=m+1;i+=1);
i--;
if((1<<i)!=m+1) printf("%d",i+1);
else printf("%d",i);
return 0;
}