蒟蒻求助水题

P7071 [CSP-J2020] 优秀的拆分

xd你这做法的思路是什么?
by Felix_Xie @ 2021-07-01 06:31:21


没看出来这个作法有什么科学依据
by Felix_Xie @ 2021-07-01 06:35:43


@[Jiayn](/user/267122) 哥你 a[i]=a[i-1]*2 a[1]=1 不香吗?非得这样浪费复杂度
by Felix_Xie @ 2021-07-01 06:46:58


@[Jiayn](/user/267122) 初值可能赋的不对,但是思路总归没错
by Felix_Xie @ 2021-07-01 06:48:10


@[Felix_Xie](/user/491380) 谢谢您的提醒,我改一下代码,再发一下qwq
by Jiayn @ 2021-07-01 06:53:21


我发一下我的AC代码,一种开数组,一种不开
by Felix_Xie @ 2021-07-01 06:56:52


@[tgyyds](/user/517126) ```cpp #include<bits/stdc++.h> using namespace std; int sum=0; int main() { int s,a[1025],n,i,q=0; cin>>n; if(n%2!=0) cout<<"-1"; else { a[1] = 1; for(i=2;i<=25;i++) { a[i]=a[i-1]*2; } for(i=25;i>=2;i--) { if(sum < n && a[i] <= n-sum){ cout<<a[i]<<" "; sum+=a[i]; } } } return 0; } ``` 这样就可以过了(改动有些大qwq)
by Jiayn @ 2021-07-01 06:57:25


二进制思想 ```cpp #include<bits/stdc++.h> using namespace std; int n,x,s=1; int a[32]; int main(){ scanf("%d",&n); if(n%2){ printf("-1"); return 0; } while(n){ if(n%2) a[++x]=s; n/=2,s*=2; } for(int i=x;i>=1;i--) printf("%d ",a[i]); return 0; } ```
by Felix_Xie @ 2021-07-01 06:57:39


一种算是逐步逼近,好处是不用开数组 ```cpp #include<bits/stdc++.h> using namespace std; int n,x,nt; int main(){ scanf("%d",&n); nt=n; if(n%2){ printf("-1"); return 0; } while(nt>0){ x=1; while(n>1) n/=2,x*=2; printf("%d ",x); nt-=x; n=nt; } return 0; } ```
by Felix_Xie @ 2021-07-01 06:58:47


@[Felix_Xie](/user/491380) orz orz
by _Emiria_ @ 2021-07-01 09:05:20


| 下一页