贝壳找房魔法师顾问 2018 计蒜之道 复赛

2023-10-15 02:40

本文主要是介绍贝壳找房魔法师顾问 2018 计蒜之道 复赛,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

https://nanti.jisuanke.com/t/A1725

 

V&V

无向图

强连通图

每个子图,n个点,选择n-1条,使互相连接

因为目标点x->点y,可以改为点y->点x

 

V&C

弱连通图(将有向图的所有的有向边替换为无向边,所得到的图称为原图的基图。如果一个有向图的基图是连通图,则有向图是弱连通图。)

1.一个弱连通子图,它里面的点与该弱连通子图外的点与没有关系,可以单独处理

2.弱连通子图里,一个点,必有另外点与之相邻,包括入和出

3.若弱连通子图里有环,则无论怎么修改,避免不了最后的图,有环的情况(因为需求无法改变,x指向y,则从x出发,必有路径到y),

对于环外剩下的点,也必至少有一条边,总边数大于等于点数

4.对于弱连通子图的点,可以构造一个环,使它们相互可以到达,需要的边的数量为点数

5.所以对于有环的弱连通子图,选择4的方案,构造环

6.对于没有环的弱连通子图,求拓扑排序,从小到大赋予编号,

按照编号,点1连接,点2连接点3,...,点p-1连接点p,满足条件。

对于边,必定是编号小的点连接编号大的点,所以没有产生遗漏。

需要的边的数量为点数-1

 

6
Constant 1 2 3 1 2 3
Variable 4 4 4 5 5 5

 

 计蒜客好像不能开以下优化,差评:

    ios_base::sync_with_stdio(0);
    cin.tie(0);

 

///所以参加比赛时,先测试一下这些能不能用

 

  1 #include <cstdio>
  2 #include <cstdlib>
  3 #include <cmath>
  4 #include <cstring>
  5 #include <string>
  6 #include <algorithm>
  7 #include <iostream>
  8 using namespace std;
  9 #define ll long long
 10 #include <map>
 11 
 12 const double eps=1e-8;
 13 const ll inf=1e9;
 14 const ll mod=1e9+7;
 15 const int maxn=1e5+10;
 16 
 17 struct node
 18 {
 19     int d;
 20     node *to;
 21 }*e[maxn],*b[maxn];
 22 
 23 string c[2];
 24 int s[2][maxn],tot[maxn],q[maxn];
 25 bool vis[maxn];
 26 
 27 map<pair<int,int>,int> ma;
 28 
 29 int main()
 30 {
 31 //    ios_base::sync_with_stdio(0);
 32 //    cin.tie(0);
 33 
 34     node *p;
 35     int n,i,j,k,x,y,cnt=0;
 36     int head,tail,d,temp;
 37     scanf("%d",&n);
 38     k=0;
 39     for (j=0;j<2;j++)
 40     {
 41         cin>>c[j];
 42         if (j==0 && c[0][0]=='C')
 43             k=1;
 44 
 45         for (i=1;i<=n;i++)
 46             cin>>s[j^k][i];
 47     }
 48     if (k==1)
 49         swap(c[0],c[1]);
 50 
 51     if (c[0][0]=='C' && c[1][0]=='C')
 52     {
 53         for (i=1;i<=n;i++)
 54             if (s[0][i]!=s[1][i])
 55                 break;
 56         if (i==n+1)
 57             cout<<0;
 58         else
 59             cout<<-1;
 60     }
 61     else if (c[1][0]=='C')
 62     {
 63         for (i=1;i<=n;i++)
 64         {
 65             x=s[0][i];
 66             y=s[1][i];
 67             if (x==y || ma.find({x,y})!=ma.end())
 68                 continue;
 69             ma[{x,y}]=1;
 70             p=new node();
 71             p->d=y;
 72             p->to=e[x];
 73             e[x]=p;
 74 
 75             p=new node();
 76             p->d=x;
 77             p->to=e[y];
 78             e[y]=p;
 79             tot[y]++;
 80 
 81             p=new node();
 82             p->d=y;
 83             p->to=b[x];
 84             b[x]=p;
 85 
 86         }
 87 
 88         for (i=1;i<=1e5;i++)
 89             if (!vis[i] && e[i])
 90             {
 91                 q[1]=i;
 92                 vis[i]=1;
 93                 head=0,tail=1;
 94                 while (head<tail)
 95                 {
 96                     d=q[++head];
 97                     p=e[d];
 98                     while (p)
 99                     {
100                         if (!vis[p->d])
101                         {
102                             vis[p->d]=1;
103                             q[++tail]=p->d;
104                         }
105                         p=p->to;
106                     }
107                 }
108 
109                 temp=tail;
110                 head=0,tail=0;
111                 for (j=1;j<=temp;j++)
112                     if (!tot[q[j]])
113                         q[++tail]=q[j];
114 
115                 ///if no loop, traversal tail points
116                 while (head<tail)
117                 {
118                     head++;
119                     d=q[head];
120                     p=b[d];///
121                     while (p)
122                     {
123                         tot[p->d]--;
124                         if (!tot[p->d])
125                             q[++tail]=p->d;
126                         p=p->to;
127                     }
128                 }
129                 cnt+=temp-(tail==temp);
130             }
131         cout<<cnt;
132     }
133     else
134     {
135         for (i=1;i<=n;i++)
136         {
137             x=s[0][i];
138             y=s[1][i];
139             if (x==y)
140                 continue;
141             p=new node();
142             p->d=y;
143             p->to=e[x];
144             e[x]=p;
145 
146             p=new node();
147             p->d=x;
148             p->to=e[y];
149             e[y]=p;
150         }
151 
152         for (i=1;i<=1e5;i++)
153             if (!vis[i] && e[i])
154             {
155                 q[1]=i;
156                 vis[i]=1;
157                 head=0,tail=1;
158                 while (head<tail)
159                 {
160                     d=q[++head];
161                     p=e[d];
162                     while (p)
163                     {
164                         if (!vis[p->d])
165                         {
166                             vis[p->d]=1;
167                             q[++tail]=p->d;
168                         }
169                         p=p->to;
170                     }
171                 }
172                 cnt+=tail-1;
173             }
174         cout<<cnt;
175     }
176     return 0;
177 }
178 /*
179 2
180 Constant 111 222
181 Constant 111 223
182 
183 2
184 Constant 111 222
185 Constant 111 222
186 
187 5
188 Variable 111 222 333 444 555
189 Variable 222 333 111 444 666
190 
191 5
192 Constant 111 222 333 444 333
193 Variable 222 111 444 555 666
194 
195 5
196 Variable 222 111 444 555 666
197 Constant 111 222 333 444 333
198 
199 7
200 Variable 222 111 444 555 666 444 444
201 Constant 111 222 333 444 333 666 555
202 
203 3
204 Variable 111 111 111
205 Variable 222 222 222
206 
207 4
208 Constant 333 111 111 111
209 Variable 333 222 222 222
210 
211 6
212 Constant 1 2 3 1 2 3
213 Variable 4 4 4 5 5 5
214 
215 6
216 Variable 1 2 3 1 2 3
217 Variable 4 4 4 5 5 5
218 
219 3
220 Variable 1 2 3
221 Variable 4 5 6
222 
223 3
224 Constant 1 2 3
225 Variable 4 5 6
226 */

 

转载于:https://www.cnblogs.com/cmyg/p/11147898.html

这篇关于贝壳找房魔法师顾问 2018 计蒜之道 复赛的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/214828

相关文章

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

贝壳面试:什么是回表?什么是索引下推?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50+)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: 1.谈谈你对MySQL 索引下推 的认识? 2.在MySQL中,索引下推 是如何实现的?请简述其工作原理。 3、说说什么是 回表,什么是 索引下推 ? 最近有小伙伴在面试 贝壳、soul,又遇到了相关的

Python中的属性装饰器:解锁更优雅的编程之道

引言 在Python的世界里,装饰器是一个强大的工具,它允许我们以一种非侵入性的方式修改函数或方法的行为。而当我们谈论“属性装饰器”时,则是在探讨如何使用装饰器来增强类中属性的功能。这不仅让我们的代码更加简洁、易读,同时也提供了强大的功能扩展能力。本文将带你深入了解属性装饰器的核心概念,并通过一系列实例展示其在不同场景下的应用,从基础到进阶,再到实际项目的实战经验分享,帮助你解锁Python编程

2018秋招C/C++面试题总结

博主从8月中旬开始大大小小面试了十几家公司,至今也许是告一段落吧,希望后面会有好结果,因此总结记录一些C/C++方向常见的问题。和大家一起学习! 参考了互联网的各种资源,自己尝试归类整理,谢谢~ 一、C和C++的区别是什么? C是面向过程的语言,C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。 C中函数不能进行重载,C++函数可以重载 C++在C的基础上增添类,C是一个结构

大厂算法例题解之网易2018秋招笔试真题 (未完)

1、字符串碎片 【题目描述】一个由小写字母组成的字符串可以看成一些同一字母的最大碎片组成的。例如,“aaabbaaac” 是由下面碎片组成的:‘aaa’,‘bb’,‘c’。牛牛现在给定一个字符串,请你帮助计算这个字符串的所有碎片的 平均长度是多少。 输入描述: 输入包括一个字符串 s,字符串 s 的长度 length(1 ≤ length ≤ 50),s 只含小写字母(‘a’-‘z’) 输出描述

vulhub GhostScript 沙箱绕过(CVE-2018-16509)

1.执行以下命令启动靶场环境并在浏览器访问 cd vulhub/ghostscript/CVE-2018-16509 #进入漏洞环境所在目录   docker-compose up -d #启动靶场   docker ps #查看容器信息 2.访问网页 3.下载包含payload的png文件 vulhub/ghostscript/CVE-2018-16509/poc.png at

百度之星 2015 复赛 1001 (数长方形)

数长方形    Accepts: 595    Submissions: 1225  Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description 小度熊喜欢玩木棒。一天他在玩木棒的时候,发现一些木棒会形成长方形

什么才是相处之道

人与人的相处需要很多的技巧,也许很多人都不懂,可是,不懂不要紧,只要你有心,努力去学习就行,在学习中逐渐积累自己与人相处的经验,让自己在与人相处中逐渐游鱼得水。其实,相处之道很简单,就是互相信任,互相理解,可是现代的社会,这些还存在吗?

Python JAVA接口UTC 时间 '2018-08-06T10:00:00.000Z' 格式转化为本地时间

Python JAVA接口UTC 时间 '2018-08-06T10:00:00.000Z' 格式转化为本地时间 方法1 import datetimeorigin_date_str= "2019-07-26T08:20:54Z"utc_date = datetime.datetime.strptime(origin_date_str, "%Y-%m-%dT%H:%M:%SZ")loca

设计之道:ORM、DAO、Service与三层架构的规范探索

引言: 实际开发中,遵守一定的开发规范,不仅可以提高开发效率,还可以提高项目的后续维护性以及项目的扩展性;了解一下本博客的项目设计规范,对项目开发很有意义 一、ORM思想 ORM(Object-Relational-Mapping)在对象模型和关系型模型之间做一个映射(转换)。 目的是为了解决面向对象编程语言的发展和关系型数据库的发展不匹配的问题 可以理解为: 将Java中的数据结