0
点赞
收藏
分享

微信扫一扫

输入输出第十三届ICPC

ixiaoyang8 2022-04-26 阅读 46
c++

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 524288K,其他语言1048576K
64bit IO Format: %lld

你有一条长度为n的一维直线,我们可以用区间[1,n]来表示。直线一开始是白色的,你想给这条直线染色,
染色是有要求的,你有m个限制,第i个限制有两个数Li,RiL_i,R_iLi​,Ri​,表示直线上[Li,Ri][L_i,R_i][Li​,Ri​] 这个区间必须是黑色的;
剩下的没有被限制包含的区间必须是白色的;
直线上有K个点,你每次可以选择两个点(设它们位于位置x和位置y),将这两点之间的区间的颜色改变,也就是黑色变白色,白色变黑色,代价是这个区间的大小,即|x-y|;
你想知道在满足限制的条件下,最小的染色代价是多少。

第一行,三个正整数n,m,K (1≤n,m,K≤100000)n,m,K\ (1 \leq n,m,K \leq 100000)n,m,K (1≤n,m,K≤100000) ,分别表示直线长度、限制个数和点的个数。
接下来m行,每行两个正整数,表示Li,Ri (1≤Li≤Ri≤n)L_i,R_i\  (1 \leq L_i \leq R_i \leq n)Li​,Ri​ (1≤Li​≤Ri​≤n)。
最后一行,K个正整数,第i个表示第i个点的位置ai (1≤ai≤n)a_i\ (1\leq a_i \leq n)ai​ (1≤ai​≤n)。
保证m个限制区间两两互不相交,且一定存在至少一种合法的染色方案满足限制
总共一行,一个整数,表示满足限制的条件下,最小的染色代价是多少。

示例1

10 3 9
2 4
6 8
9 10
1 2 3 4 6 7 8 9 10
5
#include <iostream>
#include <vector>
using namespace std;
const int N = 100000+10;
int L[N],R[N];
int a[N];
int main()
{
	int n,m,k;
	cin>>n>>m>>k;
	for(int i = 1;i <= n;i ++ )
	{
		a[i]=1;
	}
	for(int i = 1;i <= m;i ++ )
	{
		int l,r;
		cin>>l>>r;
		L[i]=l;
		R[i]=r;
	}
	while(k--)
	{
		int num;
		cin>>num;
	}
	int ans=0;
	for(int i = 1;i <= m;i ++ )
	{
		ans=ans+abs(R[i]-L[i]);
	}
	cout<<ans;
	return 0;
}

k个可操控的点屁用没有,这就是个签到题,我被唬住了 

举报

相关推荐

0 条评论