CodeForces 618A Slime Combining
明明觉得是水题,而我却做了一个小时。
明明觉得代码没有错,而我却错了好几次。
因为我的名字不叫明明,也不叫铭铭T_T最后还是铭神指出了我的错误
又新学到了新的姿势:
1.浮点数的比较要用eps来比较
2.log2(n)要写成log10(n)/log10(2)
其他的话这道题目刚开始没有思路,其实在草稿纸上写一下就可以发现了哦我的表达能力太差了只可意会不可言传T_T
1 #include <cstdio> 2 #include <iostream> 3 #include <cmath> 4 #include <cstring> 5 #include <queue> 6 #include <vector> 7 #include <algorithm> 8 9 #define rep(i,a,n) for(int i = a;i < n;i++) 10 #define per(i,n,a) for(int i = n-1;i >=a;i--) 11 #define pb push_back 12 #define VI vector<int> 13 #define QI queue<int> 14 #define log2(N) log10(N)/log10(2) 15 #define eps 1e-8 16 17 typedef long long ll; 18 19 using namespace std; 20 21 22 int n; 23 //int a[M][P] = {}; 24 25 void solve(int b){ 26 int m = b; 27 while(log2(m) - floor(log2(m))>eps){ 28 m--; 29 } 30 int tmp = b - m; 31 int d = floor(log2(m)+1); 32 if(tmp == 0){ 33 printf("%d",d); 34 return; 35 } 36 printf("%d ",d); 37 solve(tmp); 38 } 39 40 int main(){ 41 while(~scanf("%d",&n)){ 42 solve(n); 43 puts(""); 44 } 45 return 0; 46 }