首页 > 其他分享 >一半

一半

时间:2023-03-09 19:25:06浏览次数:27  
标签:sort return 一半 break int while 3000

思路

这道题没有上传测评,也不知道这个代码能不能通过。。。

但是至少有一点我可以确定,就是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

相关文章