思路
这道题没有上传测评,也不知道这个代码能不能通过。。。
但是至少有一点我可以确定,就是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]&&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;
}
标签:sort,return,一半,break,int,while,3000 From: https://www.cnblogs.com/cytxzgbp/p/half.html