简单的爱心效果

一半

思路

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

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

 

posted @ 2023-03-09 19:06  Light-Chaser  阅读(11)  评论(0编辑  收藏  举报
简单的爱心效果