首页 > 其他分享 >D. Moving Dots(组合数学,贡献,二分/双指针)

D. Moving Dots(组合数学,贡献,二分/双指针)

时间:2023-02-16 18:55:14浏览次数:54  
标签:Dots 二分 const int res bound 贡献 Moving mod

题目

思路

  • 从题目给的“2”这个信息入手,从贡献这个方面来考虑
  • 对于任意两不同的点,具有一定的范围,让这个范围内的点都被吸过来
  • 于是范围外的点能保证两点相互靠近产生一次贡献,所以,这些范围外的数字可选可不选
  • 对于(i,j)
    • l = lower_bound(x+1,x+n+1,x[i] - len)
    • r = lower_bound(x+1,x+n+1,x[j] + len)
    • 贡献为 \(2^{l + n - r + 1}\)

代码

const int N = 3010;
const int mod = 1e9+7;
int x[N];
int qmi(int x,int y)
{
    int res = 1;
    int p = x;
    while(y)
    {
        if(y & 1)res = (res * p) % mod;
        y >>= 1;
        p = (p * p) % mod;
    }
    return res;
}
void solve() 
{
    int n;cin >> n;
    for(int i = 1;i <= n;i ++)
        cin >> x[i];

    int ans = 0;
    for(int i = 1;i <= n;i ++)
    {
        for(int j = i+1;j <= n;j ++)
        {
            int len = x[j] - x[i];
            int l = lower_bound(x+1,x+n+1,x[i] - len) - x - 1;
            int r = lower_bound(x+1,x+n+1,x[j] + len) - x;
            // debug2(l,r);
            ans = (ans + qmi(2,l + n - r + 1)) % mod;
            // debug1(ans);
        }
    }

    cout << ans << endl;
}
signed main()
{

    // ios::sync_with_stdio(false);
    // cin.tie(0);
    // cout.tie(0);

    // caseT
    solve();
    
    return 0;

}

标签:Dots,二分,const,int,res,bound,贡献,Moving,mod
From: https://www.cnblogs.com/cfddfc/p/17127921.html

相关文章

  • 2.二分查找新方法
    2.二分查找目录2.二分查找2.1新方法2.2例子162.寻找峰值2.1新方法近日重写二分查找的算法题还是倍感疑惑,在边界问题上还是有问题。在B站学习的时候,学到了一种新的理......
  • 基础二分查找
    二分查找力扣题目链接[704.二分查找-力扣(LeetCode)],给定一个 n 个元素有序的(升序)整型数组 nums和一个目标值 target ,写一个函数搜索 nums 中的target,如果目......
  • 代码随想录算法训练营 第一天 | 704. 二分查找,27. 移除元素
    二分查找心得:1,两种区间查找方式 第一种左闭右闭 关键有三点从0到length-1 边界取值left=mid+1或right=mid-1 查找条件是left<=right第二种左闭右开 ......
  • 【二分图】匈牙利求最大匹配
    导读^_^情人节特刊。一群爱好算法的单身人士在家用着二分图匈牙利算法帮别人牵着红线。呜呜呜呜呜~匈牙利求最大匹配(n*m,实际效果很好)思路与流程对要匹配的指向......
  • 二分法计算错误
    2023牛客冬季训练5-A二分代码出错,使用upper_bound()正确while(l<r){intmid=l+r+1>>1;if(a[mid]<=x)......
  • F - Financial Planning Gym - 102007F 【 二分答案 】
    BAPC2018 The2018BeneluxAlgorithmProgrammingContest &:对于需要的天数来二分,然后验证,注意的是r的数据不能开的太小或者太大。#include<bits/stdc++.h>......
  • 「网络流 24 题」搭配飞行员 (二分匹配 最大匹配)
    题目描述飞行大队有若干个来自各地的驾驶员,专门驾驶一种型号的飞机,这种飞机每架有两个驾驶员,需一个正驾驶员和一个副驾驶员。由于种种原因,例如相互配合的问题,有些驾驶......
  • 经典-量子混合二分类网络预测肺炎
    本教程使用MindQuantum复现了论文AClassical-QuantumConvolutionalNeuralNetworkforDetectingPneumoniafromChestRadiographs中的网络结构。准备工作安装MindQ......
  • 二分查找
    二分查找思路:找到最后一个小于等于IP的元素找到第一个大于等于IP的元素前提条件:数据有序随机访问实现:递归实现非递归(循环实现)注意事项:循环退出条件mid......
  • 6-10 二分查找 (20分)
    本题要求实现二分查找算法。函数接口定义:PositionBinarySearch(ListL,ElementTypeX);其中List结构定义如下:typedefintPosition;typedefstructLNode*......