为什么用ceil也能a
查看原帖
为什么用ceil也能a
579060
kaxaw楼主2025/7/3 10:29

为什么我把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;
}
2025/7/3 10:29
加载中...