一半
思路
这道题没有上传测评,也不知道这个代码能不能通过。。。
但是至少有一点可以确定,就是m肯定到某个范围输出的结果一定全为0.
因为1<=a[i]<=10^9<2^30, 1<=n<=100,
所以当m>=100*30=3000,直接输出0即可。
至于剩下的,直接模拟就可以了,应该也超不了时。。
代码
#include<cstdio> #include<algorithm> using namespace std; int n,m; int a[101]; bool t; int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&a[i]); if(m>=3000){ for(int i=1;i<=n;i++) printf("%d ",0); return 0; } sort(a+1,a+n+1); while(m>0){ t=true; while(a[n]>=a[n-1]&&m>0&&a[n]!=0) a[n]>>=1,m--; for(int i=1;i<=n;i++) if(a[i]>0){ t=false; break; } if(t) break; sort(a+1,a+n+1); } for(int i=1;i<=n;i++) printf("%d ",a[i]); return 0; }