1 条题解

  • 0
    @ 2026-8-9 11:29:49
    #include <bits/stdc++.h>
    #define int long long
    #define mk make_pair
    #define PII pair<int,int>
    #define FOR(i,j,k) for(int i=(j);i<=(k);++i)
    #define ROF(i,j,k) for(int i=(j);i>=(k);--i)
    #define FOI(a,b) for(auto a : b)
    #define wh while
    #define inf 0x3f3f3f3f3f3f3f3f
    #define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    #define snd second
    #define fst first
    #define pb push_back
    #define CI const int
    #define NP namespace
    using NP std;
    int quickpow(int a,int b)
    {
    	int ans=1;
    	wh(b)
    	{
    		if(b&1)ans=ans*a;
            a=a*a;
    		b>>=1;
    	}
    	return ans;
    }
    CI MAXN=1e5+5;
    int l[MAXN],r[MAXN],n,m,cnt=0,ans=0; 
    vector<PII> d,c; 
    void solve()
    {
    	d.clear();
    	c.clear();
    	ans=0,cnt=0;
    	cin>>n>>m;
    	FOR(i,1,n)
    	{
    		cin>>l[i]>>r[i];
    		d.pb({l[i]+1,1});
    		d.pb({r[i],-1});
    	}
    	sort(d.begin(),d.end());
    	int last=0;
    	FOI(x,d)
    	{ 
    		if(last!=x.fst)
    		{
    			int len=x.fst-last;
    			c.pb({cnt,len});
    			last=x.fst;
    		}
    		cnt+=x.snd;
    	}
    	sort(c.begin(),c.end());
    	reverse(c.begin(),c.end());
    	FOI(s,c)
    	{
    		if(m>=s.snd)
    		{
    			m-=s.snd;
    			ans+=s.fst*s.snd;
    		}
    		else
    		{
    			ans+=m*s.fst;
    			break;
    		}
    	}
    }
    signed main(void)
    {
        freopen("slicing.in","r",stdin);
        freopen("slicing.out","w",stdout);
    	IOS
    	int t;
    	cin>>t;
    	FOR(i,1,t)
    	{
    		solve();
    		cout<<"Case #"<<i<<": "<<ans+n<<"\n";
    	}
        return false;
    }
    

    信息

    ID
    7120
    时间
    2000ms
    内存
    256MiB
    难度
    1
    标签
    (无)
    递交数
    59
    已通过
    10
    上传者