题解 P1296

· · 题解

作为一名NOIP只有185的蒟蒻只能写写这种入门难度的题解

但为了让审核通过我还是加了一点新意

这是一道简单模拟题,但需要加一点小优化

详见代码:

    #include<bits/stdc++.h> //万能头文件
    #define f1(i,j,n) for(i=j;i<=n;i++)
    #define f2(x,i,j,n) for(i=j;i<=n&&p[i]<=p[x]+d;i++) //资深define用户,define大法好!注意循环内直接判断比if快!我试了,直接if会RE两个点QwQ
    using namespace std;
    int p[1000005];
    int main()
    {
        ios::sync_with_stdio(false); //cin,cout的输入输出优化
        int n,d,i,j,ans=0;
        cin>>n>>d;
        f1(i,1,n)
            cin>>p[i]; //读入
        sort(p+1,p+1+n); //按升序排序,这里插一句题外话,因为最近学到了各种各样奇奇怪怪的排序,经我同学研究发现,可以在一趟排序中大数据用归并,小数据用冒泡,比快排快,dalao们可以试试!
        f1(i,1,n)
            f2(i,j,i+1,n) //这就是define的好处,看,多么方便
                ans++; //因为循环判断代替了if判断语句,所以ans直接每次加一下即可
        cout<<ans<<endl; //最后输出
        return 0; //华丽丽地结束
    }