为什么我把floor写成了ceil也能过 附代码(100pts)
#include <bits/stdc++.h>
using namespace std;
long long read(){
long long x=0,f=1;char c;
while((c=getchar())<'0'||c>'9')if(c=='-')f=-1;
while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=getchar();
return f==1?x:-x;
}
const int N=1e5+10;
long long a[N];
int main(){
int T=read();
while(T--){
long long n=read(),m=read(),ans=0;
long long sum=0;
for(int i=1;i<=n;i++){
a[i]=read();//continue;
long long x=ceil(m/a[i]),y=x?ceil(m/x):x;
if(a[i]<x){
sum+=x;
a[i]=1;
}
else if(a[i]<y){
sum+=y;
a[i]=2;
}
else if(a[i]==x){
sum+=a[i];
i--;n--;
}
else{
sum+=a[i];
a[i]=0;
}
}
while(a[n]==0&&n)n--;
int j=n;
if(n==0){printf("%lld %lld\n",sum,ans);continue;}
for(int i=1;i<=n;i++)if(a[i]){j=i;break;}
for(int i=j;i<=n;i++)if(!a[i])a[i]=2;
a[n+1]=0;
for(int i=j;i<=n;i++){
if(a[i]>a[i+1]){
ans++;
}
}
if(a[n]==2)ans++;
printf("%lld %lld\n",sum,ans);
}
return 0;
}