龙华网站开发公司电话,创保网,公众号免费素材网站,高清的宝安网站推广排座椅
时间限制#xff1a;1秒 空间限制#xff1a;50M
知识点#xff1a;贪心
网页链接
牛客tracker
牛客tracker 每日一题#xff0c;完成每日打卡#xff0c;即可获得牛币。获得相应数量的牛币#xff0c;能在【牛币兑换中心】#xff0c;换取相应奖品1秒 空间限制50M知识点贪心网页链接牛客tracker牛客tracker 每日一题完成每日打卡即可获得牛币。获得相应数量的牛币能在【牛币兑换中心】换取相应奖品助力每日有题做丰盈牛币日益多题目描述教室内共有n nn行m mm列座位坐在第i ii行第j jj列同学的位置记为( i , j ) (i,j)(i,j)。为了方便进出班主任计划设置k kk条横向通道贯穿整列的水平通道与l ll条纵向通道贯穿整行的竖直通道。通道位于相邻两行或两列之间。班主任记录了d dd对经常交头接耳的同学他们的位置( x i , y i ) (x_i,y_i)(xi,yi)与( p i , q i ) (p_i,q_i)(pi,qi)保证相邻上下或左右。她希望通过合理放置通道使尽可能多的交头接耳对被通道隔开。现请你输出唯一的最优方案在该方案下仍未被通道隔开的交头接耳对的数量最少。输入描述第一行输入五个整数n , m , k , l , d ( 2 ≦ n , m ≦ 1 0 3 ; 0 k n ; 0 l m ; 0 d ≦ 2 × m i n n,m,k,l,d(2≦n,m≦10^3; 0kn; 0lm; 0d≦2×minn,m,k,l,d(2≦n,m≦103;0kn;0lm;0d≦2×min{n × m , 2 × 1 0 3 n×m,2×10^3n×m,2×103}) ))。接下来d dd行每行输入四个整数x i , y i , p i , q i x_i,y_i,p_i,q_ixi,yi,pi,qi表示坐标( x i , y i ) (x_i,y_i)(xi,yi)与( p i , q i ) (p_i,q_i)(pi,qi)的两位同学会交头接耳且两坐标上下相邻或左右相邻。保证最优方案存在且唯一。输出描述第一行输出k kk个严格递增的整数a 1 , a 2 , … , a k ( 1 ≦ a 1 ⋯ a k ≦ n − 1 ) a_1,a_2,…,a_k(1≦a_1⋯a_k≦n−1)a1,a2,…,ak(1≦a1⋯ak≦n−1)在行a i a_iai与a i 1 a_{i1}ai1之间设置横向通道。第二行输出l ll个严格递增的整数b 1 , b 2 , … , b l ( 1 ≦ b 1 ⋯ b l ≦ m − 1 ) b_1,b_2,…,b_l(1≦b_1⋯b_l≦m−1)b1,b2,…,bl(1≦b1⋯bl≦m−1)在列b i b_ibi与b i 1 b_{i1}bi1之间设置纵向通道。示例1输入4 5 1 2 3 4 2 4 3 2 3 3 3 2 5 2 4输出2 2 4说明该样例如下图所示蓝底斜线方格为第一对交头接耳的同学绿底带叉方格为第二对交头接耳的同学粉底带星方格为第三对交头接耳的同学。粗线代表通道。该划分方案为唯一最优方案。示例2输入2 2 1 1 4 1 1 1 2 1 1 2 1 2 1 2 2 1 2 2 2输出1 1解题思路首先初始化两个结构体数组分别记录纵向通道列间和横向通道行间的位置编号及能隔开的交头接耳对数遍历每对交头接耳的同学若两人左右相邻则累加对应列间位置的计数若上下相邻则累加对应行间位置的计数随后对纵向、横向计数数组按隔开对数降序排序选取前l ll个纵向位置和前k kk个横向位置再将选中的位置按编号升序排序最终依次输出排序后的横向、纵向通道位置该贪心策略优先选择隔开对数最多的位置保证最大化隔开的交头接耳对且因最优方案唯一排序操作能精准得到结果时间复杂度适配n nn、m ≤ 1 e 3 m≤1e3m≤1e3和d ≤ 2 e 3 d≤2e3d≤2e3的规模高效构造出唯一的最优通道放置方案。代码内容#includebits/stdc.husingnamespacestd;typedeflonglongll;typedefpairll,llpii;constll p1e97;constll N5e220;structIDCnt{ll id0,cnt0;}cnt[2][1005];boolcmp1(IDCnt a,IDCnt b){returna.cntb.cnt;}boolcmp2(IDCnt a,IDCnt b){returna.idb.id;}intmain(){ll n,m,k,l,d;cinnmkld;for(ll i1;im;i)cnt[0][i].idi;for(ll i1;in;i)cnt[1][i].idi;for(ll i0;id;i){ll x,y,p,q;cinxypq;if(xp)cnt[0][min(y,q)].cnt;elsecnt[1][min(x,p)].cnt;}sort(cnt[0]1,cnt[0]m,cmp1);sort(cnt[1]1,cnt[1]n,cmp1);sort(cnt[0]1,cnt[0]l1,cmp2);sort(cnt[1]1,cnt[1]k1,cmp2);for(ll i1;ik;i)coutcnt[1][i].id ;coutendl;for(ll i1;il;i)coutcnt[0][i].id ;return0;}