D. Rescue Nibel!


题意:总共有n个线段,问选择k条线段,使得他们相交于一点的方案数。
思路:用类似差分的思想,将每条线段的l和r+1放进数组里并且分别带有1和-1的权值,将数组按照坐标大小排序,如果坐标大小不同按照权制大小排序,权值小的放在前面,然后依次遍历下来,把方案定义为以第i个灯泡为末尾(即该灯泡的坐标在选的坐标里最大)的方案数,这些方案是不重不漏的,加起来就是答案了,然后模数不是质数,要用扩展欧几里得求,然后我忘了咋写了。

#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
struct node{
   
    ll x;
    int d;
    bool operator <(const node&W)const
    {
   
        if(x==W.x)
            return d<W.d;
        return x<W.x;
    }
};
const int N=600010;
const int mod= 998244353;
node q[N];
int cnt;
ll fact[N];
ll infact[N];
ll qmi(ll a,int b)
{
   
    ll res=1;
    while(b)
    {
   
        if(b&1) res=res*a%mod;
        a=a*a%mod;
        b>>=1;
    }
    return res%mod;
}
ll exgcd(ll a,ll b,ll &x,ll & y);
void init()
{
   
    fact[0]=infact[0]=1;
    for(int i=1;i<N;i++)
    {
   
        fact[i]=fact[i-1]*i%mod;
        ll x, y;
        ll d=exgcd(fact[i],mod,x,y);
        infact[i]=(x%mod+mod)%mod;
    }
}
ll C(ll a,ll b)
{
   
    if(b>a) return 0;
    return fact[a]*infact[a-b]%mod*infact[b]%mod;
}
ll exgcd(ll a,ll b,ll &x,ll & y)
{
   
    if(!b)
    {
   
        x=1,y=0;
        return a;
    }
    ll d=exgcd(b,a%b,y,x);
    y-=a/b*x;
    return d;
}
int main()
{
   
    int n,m;
    init();
   // cout<<fact[3]<<' '<<C(6,3)<<endl;
    cin>>n>>m;
    for(int i=0;i<n;i++)
    {
   
        int l,r;
        cin>>l>>r;
        q[cnt++]={
   l,1};
        q[cnt++]={
   r+1,-1};
    }
    sort(q,q+cnt);
    int ct=0;
    ll res=0;
    for(int i=0;i<cnt;i++)
    {
   
        //cout<<ct<<endl;
        if(q[i].d==1)
        res = (res+C(ct,m-1))%mod;
        ct+=q[i].d;
    }
    cout << res << endl;
    return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-07 18:05
哈哈哈哈哈感觉朋友找工作的已经疯掉了,直接上图
码农索隆:真老板娘:“我嘞个去,这不我当年的套路吗
点赞 评论 收藏
分享
Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
机械打工仔:我来告诉你原因,是因为sobb有在线简历,有些HR为了快会直接先看在线简历,初步感觉不合适就不会找你要详细的了
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务