霖念 2017-07-21 03:07 采纳率: 0%
浏览 683

谁能帮我看看这道算法题的思路哪里错了(要奔溃了T_T)

图片说明
下面是我写的代码。

#include
#include
using namespace std;
bool cmp(long long a, long long b)
{
return a < b;
}
int main()
{
int t;
cin >> t;

while(t--)
{
    long long n, m, k, p;
    cin >> n >> m >> k >> p;
    long long arr[n];

    for(int i = 0; i < n; i++)
    {
        scanf("%lld", &arr[i]);
    }

    sort(arr, arr + n, cmp);
    long long ans = 0;

    for(int i = 0; i + m <= n; i++)
    {
        int left = i, right = i;
        bool flag = false;

        for(int j = i + 1; j < n; j++)
        {
            if(arr[j] - arr[left] <= k && j - i >= m - 1)
            {
                right = j;
                flag = true;
            }
        }

        long long res = 1;

        for(int j = right - left; j >= m; j--)
        {
            res *= j;
        }

        int l = m-1;
        l = l < (right - left) / 2 ? l : right - left - l;

        for(int j = 2; j <= l; j++)
        {
            res /= j;
        }

        if(flag == true)
        {
            ans = (ans + res) % p;
        }
    }

    cout << ans << endl;
}

return 0;

}

  • 写回答

2条回答 默认 最新

  • 霖念 2017-07-21 03:13
    关注

    for(int i = 0; i + m <= n; i++)
    {
    int left = i, right = i;
    bool flag = false;
    //获得与当前位置的数差距不大于K的最远位置的数
    for(int j = i + 1; j < n; j++)
    {
    if(arr[j] - arr[left] <= k && j - i >= m - 1)
    {
    right = j;
    flag = true;
    }
    }

            long long res = 1;
            //总共有right-left+1个数,第一个数肯定要选,所以共有C(right-left)(m-1)种选择
            for(int j = right - left; j >= m; j--)
            {
                res *= j;
            }
    
            int l = m-1;
            l = l < (right - left) / 2 ? l : right - left - l;
    
            for(int j = 2; j <= l; j++)
            {
                res /= j;
            }
    
            if(flag == true)
            {
                ans = (ans + res) % p;
            }
        }
                稍微写了点注释
    
    评论

报告相同问题?

悬赏问题

  • ¥15 Excel发现不可读取的内容
  • ¥15 UE5#if WITH_EDITOR导致打包的功能不可用
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?
  • ¥15 电磁场的matlab仿真
  • ¥15 mars2d在vue3中的引入问题
  • ¥50 h5唤醒支付宝并跳转至向小荷包转账界面
  • ¥15 算法题:数的划分,用记忆化DFS做WA求调
  • ¥15 chatglm-6b应用到django项目中,模型加载失败
  • ¥15 CreateBitmapFromWicBitmap内存释放问题。