求助求助!!!

P7071 [CSP-J2020] 优秀的拆分

搞二进制直接用除不就行了?不需要减来减去吧? ```cpp //求得二进制存放到数组里 bool b[25]//根据题意,n最大1000w,转成二进制也就24位,多留一位防止越界 int idx=24; while(n){ b[idx--]=n&1;//把当前个位的值放到相应位置 n>>=1;//除以2,右移速度快,高时间复杂度里用这个避免TLE,后面继续使用n时当前十位变成各位 } ``` 还有,本题不需开long long,因为题目规定**对于100%的数据,n<=10,000,000**。意思就是**int绝对能存下n**并且**25位bool绝对能存n的二进制**。 ------------ 最终AC代码: ```cpp #include <iostream> using namespace std; int main(){ int n; cin >> n; if(n&1) cout << -1; return 0; } for(int i=24;i>0;i--){ if((n>>i)&1)cout << (1<<i) << ' '; } return 0; } ```
by TNT666 @ 2021-10-06 18:25:50


|