首页 > 其他分享 >牛客周赛 Round 57 D-小红的线段(贪心)

牛客周赛 Round 57 D-小红的线段(贪心)

时间:2024-08-25 21:36:56浏览次数:4  
标签:周赛 ++ it3 牛客 m1 m3 m2 it2 Round

 示例1

输入

2 -1 2
0 0
0 1
1 0
1 1

输出

1
1 2 N
3 4 Y

说明

连接第一个点和第二个点,和直线没有交点。连接第三个点和第四个点,和直线有交点。

 

贪心策略:

把点集分为三部分,直线上方m1、直线下方m2以及在直线上m3,我们可以发现:

m1中的点和m2中的任意点相连都能通过直线;m3中的点由于在直线上,与m1,m2,m3中的任意点相连都能通过直线。显然m1和m2的匹配条件更为苛刻。

1.把m1和m2中的点两两进行匹配

2.把策略1中匹配剩下的点(若有)与m3中的点两两进行匹配

3.把m3中剩下的点(若有)两两进行匹配

至此所有能通过直线的点都匹配完成

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,k,b;
 4 vector<int> m1,m2,m3; //记录点集,m1中是直线上方的点,m2中是直线下方的点,m3中是在直线上的点
 5 map<pair<int,int>, char> result; //记录结果
 6 int cnt = 0; //记录相交线段数
 7 void solve(vector<int> m1, vector<int> m2, vector<int> m3){ //m1是上下点集中数量少的,m2是数量大的,m3是直线上的点集
 8     auto it1 = m1.begin(), it2 = m2.begin(), it3 = m3.begin();
 9     //匹配m1与m2
10     for (;it1 != m1.end(); ++it1, ++it2){ 
11         result.insert(make_pair(make_pair(*it1, *it2), 'Y'));
12         cnt++;
13     }
14     //m2中剩余的与m3进行匹配
15     if (m2.size() - m1.size() >= m3.size()){ 
16         for (; it3 != m3.end(); ++it3, ++it2){
17             result.insert(make_pair(make_pair(*it2, *it3), 'Y'));
18             cnt++;
19         }
20         for (;it2 != m2.end(); ++it2){
21             int temp = *it2;
22             ++it2;
23             result.insert(make_pair(make_pair(temp, *it2), 'N'));
24         }
25     }else{
26         for (; it2 != m2.end(); ++it2, ++it3){
27             result.insert(make_pair(make_pair(*it2, *it3), 'Y'));
28             cnt++;
29         }
30         // m3中剩余的进行匹配
31         for (;it3 != m3.end(); ++it3){ 
32             int temp = *it3;
33             ++it3;
34             result.insert(make_pair(make_pair(temp, *it3), 'Y'));
35             cnt++;
36         }
37     }
38 }
39 int main(){
40     int x,y;
41     cin>>n>>k>>b;
42     for (int i = 1; i <= 2 * n; ++i){
43         cin>>x>>y;
44         if (y < k * x + b){
45             m1.push_back(i);
46         }else if (y == k * x + b){
47             m3.push_back(i);
48         }else{
49             m2.push_back(i);
50         }
51     }
52     if (m1.size() > m2.size()){
53         solve(m2,m1,m3);
54     }else{
55         solve(m1,m2,m3);
56     }
57     cout<<cnt<<endl;
58     for (auto i : result){
59         cout<<i.first.first<<" "<<i.first.second<<" "<<i.second<<endl;
60     }
61 }

 

标签:周赛,++,it3,牛客,m1,m3,m2,it2,Round
From: https://www.cnblogs.com/coderhrz/p/18379594

相关文章

  • 牛客周赛 Round 57
    无A.小红喜欢1题意:输出1的位置Code:#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;voidsolve(){for(inti=1,x;i<=5;++i){cin>>x;if(x)cout<<i;}}intmain(){cin.tie......
  • 2024暑期牛客多校第10场 D Is it rated?
    题目大意有\(n\)场\(\textbf{按顺序}\)的比赛,第\(i\)场比赛有表现分\(p_i\)。参加第\(i\)场比赛后你的分数\(r\)将变为\(r\times(1-k)+k\timesp_i\)。你可以选择最多\(m\)场比赛不参加。给定初始分数\(r_0\)和参数\(k\)。问经过至少\(n-m\)场比赛后,分数最高是......
  • EPIC Institute of Technology Round August 2024 (Div. 1 + Div. 2)
    Preface两个礼拜前打的比赛拖到现在才写博客,我只能说也是个神人了这场其实D2很快就想到做法了,但自己把自己给否了,后面不管了实现了一发交上去发现过了然后这天由于12点左右室友就关灯睡觉了,我写完D2后看了眼E没仔细想就睡觉去了,后面发现E其实很trivialA.Distance......
  • Codeforces Round #900 (Div. 3)
    三年之后第一次打比赛,用小号打了场\(Div.3\),居然没有AK,感觉实力退步到小学了。A.HowMuchDoesDaytonaCost?若只判断题,只要判断\(\{a_n\}\)中是否存在\(k\)即可。B.AleksaandStack构造方法不唯一,我直接输出奇数列,显然正确。C.VasilijeinCacak若只判断题......
  • 算法的学习笔记—包含 min 函数的栈(牛客JZ30)
    ......
  • CSS属性background-position-y实现动画
    CSS属性background-position-y实现动画引言background-position-y属性用于设置初始状态时背景图片在垂直方向的位置,这个位置相对于通过background-origin定义的背景层原点进行定位,详见MDN文档。今天要分享的是如何利用background-position-y属性实现简单的动画,源图是静......
  • 牛客小白月赛99 C-迷宫(DFS)
    题目描述给定一个n×m\mathrm{n\timesm}n×m的迷宫,迷宫由"#"与"."两种字符组成。其中"#"代表障碍物,"."表示空地。迷宫中还有一个起点"S"和一个终点"E",它们都可以视为空地。 由于近期迷宫发生了塌方,导致起点和终点之间可能并不连通。幸运的是,你拥有一种超能......
  • 《Programming from the Ground Up》阅读笔记:p103-p116
    《ProgrammingfromtheGroundUp》学习第7天,p103-p116总结,总计14页。一、技术总结1.读写文件(1)linux.slinux.s:#filename:linux.s#systemcallnumbers(按数字大小排列,方便查看).equSYS_READ,0.equSYS_WRITE,1.equSYS_OPEN,2.equSYS_CLOSE,3.equSYS_EXI......
  • 2024 牛客多校 10
    0.prefacehttps://ac.nowcoder.com/acm/contest/81604#question过题数\(n\geq40\),几乎可补题。除非是高科技题。\(20\geqn<40\),酌情可补题。可能对得上技能树。\(n<20\),几乎不可补题。除非是一些低科技的神秘启发题。本场共\(13\)题,可补题有\(9\)题。\(......
  • 2024 牛客多校 9
    0.prefacehttps://ac.nowcoder.com/acm/contest/81604#question过题数\(n\geq40\),几乎可补题。除非是高科技题。\(20\geqn<40\),酌情可补题。可能对得上技能树。\(n<20\),几乎不可补题。除非是一些低科技的神秘启发题。本场共\(11\)题,可补题有\(9\)题。\(......