通知邻居问题

这是百度校招的一道编程题:

题目意思如下:有一个人,他通知了邻居参加晚宴,临时有事晚宴取消,由于事情紧急,他只能通知一个邻居,而邻居中有合作的邻居和没有合作的邻居,

有合作的邻居若知道会议取消,他会告诉左边挨着的两个邻居,和右边挨着的两个邻居,会议取消的消息。不合作的邻居知道会议取消,不会告诉其他邻居这个消息。

问这个人能通知到的最多人数情况。

输入:

两个参数,一个是邻居数,一个是字符串 ,c表示合作的邻居,n表示不合作的邻居。

输出:

最多通知的人数情况,I标记通知到的人数,U标记未通知到的人数。

例如:

输入:

10  ncnncncncn

输出:

UUIIIIIIII

思路:暴力求解。求出通知每个人的情况下,通知的情况,让后求出最大的一种输出。

代码如下:

#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
string annoncement(int numOfNeighbours, string characteristic);
int main(){
    int n;
    string str;
    while(1){
        cin>>n>>str;
        cout<<annoncement(n, str)<<endl;
    }
    return 0;
}

string annoncement(int numOfNeighbours, string characteristic)
{
    //WRITE YOUR CODE HERE
    int* jilu=new int[numOfNeighbours];
    int* left1=new int[numOfNeighbours];
    int* right=new int[numOfNeighbours];
    memset(jilu,0,numOfNeighbours);
    memset(left1,0,numOfNeighbours);
    memset(right,0,numOfNeighbours);
    int n=characteristic.size();
    cout<<setw(8)<<"i"<<setw(16)<<"jilu[i]"<<setw(16)<<"left1[i]"<<setw(16)<<"right[i]"<<endl;
    for(int i=0;i<n;i++)
    {
        int num=1,j=i-1,m=i+1;
        if(characteristic[i]==‘c‘){
            int k=2;
            while(k--&&j>=0){
                num++;
                if(characteristic[j--]==‘c‘){
                    k=2;
                }
            }
             k=2;
            while(k--&&m<n){
                num++;
                if(characteristic[m++]==‘c‘){
                    k=2;
                }
            }
        }
        jilu[i]=num;
        left1[i]=j+1;
        right[i]=m-1;
        cout<<setw(8)<<i<<setw(16)<<jilu[i]<<setw(16)<<left1[i]<<setw(16)<<right[i]<<endl;
    }

    int nmax=0,kk=0;
    for(int i=0;i<n;i++)
        if(nmax<jilu[i]){
            nmax=jilu[i];
            kk=i;
        }
        string str;
    for(int i=0;i<n;i++){
        if(left1[kk]<=i&&i<=right[kk])
            str+=‘I‘;
        else
            str+=‘U‘;
    }
    delete []jilu;
    delete []left1;
    delete []right;
    return str;
}
时间: 2024-10-12 17:01:29

通知邻居问题的相关文章

CCNP路由实验之十一 IPv6

                                      CCNP路由实验之十一 IPv6 IPv4是互联网协议(InternetProtocol,IP)的第四版,也是第一个被广泛使用,构成现今互联网技术的基石的协议.IPv4可以运行在各种各样的底层网络上,比如端对端的串行数据链路(PPP协议和SLIP协议),卫星链路, 以太网等等.全球因特网所采用的协议族是TCP/IP协议族.IP是TCP/IP协议族中网络层的协议,是TCP/IP协议族的核心协议.IPv4中规定IP地址长度为

网络知识整理

一.OSI 应用层:直接与用户和应用程序打交道,负责对软件提供接口 表示层:关注传输信息的语法和语义,还负责数据加密和压缩 会话层:建立会话关系,并保持会话过程和畅通,还提供差错恢复 传输层:数据分段,创建端到端的连接,差错校验和重传 网络层:编址.路由选择.拥塞控制.异种网络连接.数据分片和重组 数据链路层:帧同步,数据链路建立.维持和释放.传输资源控制.流量控制.差错控制. 寻址.标识上层数据 物理层:机械特性.电气特性.功能特性.规程特性.比特流的传输 二.PPP 2.1.会话过程: (1

【CCNA学习笔记】STP

STP(Spanning-Tree Protocol,生成树协议),该协议可应用于在网络中建立树形拓扑,消除网络中的环路,并且可以通过一定的方法实现路径冗余. 1.1 冗余拓扑中存在的问题 图1-1 单一链路的拓扑 图1-2 有冗余链路的拓扑 图1-1中,PC1和PC2只通过单一链路传输,如果该链路出现故障,会导致通信中断. 图1-2中,加入了冗余链路,解决了SW1和SW2单链路故障引起的网络中断. 但是图1-2中,可能存在的问题: 1.广播风暴 存在广播通过f1/1口出去,然后又通过f1/2口

6、RIP

在路由查找时,有类路由查找方式和无类路由查找的区别:有类路由查找:1.首先匹配主网条目.主网信息2.匹配上主网之后,再去查找子网信息3.查找到子网,就会转发,否则就丢弃4.有一种例外,没有找到主网和子网,但有一条默认路由,这样也可以转发出去 无类路由查找:1.直接最长匹配 10.1.0.0/24          10.2.0.0/24         10.3.0.0/24        10.4.0.0/24------A-------B---------C------ RIP(Routin

TCP/IP 7 路由协议

第7章 路由协议 在互联网世界中,夹杂着复杂的LAN和广域网.然而,再复杂的网络结构中,也需要通过合理的路由将数据发送到目标主机.而决定这个路由的,正是路由控制模块. 7.1 路由控制的定义 7.1.1 IP地址与路由控制 互联网是路由器连接的网络组合而成的.为了能让数据包正确地到达目标主机,路由器必须在途中进行正确地转发.这种“正确的方向”转发数据所进行的处理就叫做路由控制或路由. 路由器根据路由控制表(routing table)转发数据包.它根据所收到的数据包中目标主机的IP地址与路由控制

BGP报文和BGP邻居状态

BGP有5种message 1.  Open (code 1):用于建立连接,包含版本号(如BGP3/BGP4)Hold Time=90s(RFC1771规定的.是一个协商的过程,以较小的Hold Time为准),Router-ID(OSPF和BGP可以手动配置),AS号(范围从1-65535,其中64512-65535 的AS编号范围留作私有): 2.   KeepAlives(code 4):周期发送用于维护连接检查路径(这个包是不可靠的),T=Hold Time/3, Hold Time=

OSPF之邻居关系、邻接关系

Ospf中路由器之间存在两种连接关系:邻居关系和邻接关系.本博文将详细介绍这2种关系建立及工作原理. 如果两台路由器之间共享一条公共数据链路(两台路由器中间没有其它路由器,或者两台路由器之间存在虚连接),并且成功协商了hello包中所指定的参数,那么它们就成为邻居.如果两个邻居之间需要同步LSDB,那么它们之间需要建立邻接关系.如果两个路由器之间建立了邻接关系,那么它们的LSDB一定是同步的.LSA只在存在邻接关系的路由器之间传递. 那么邻居关系和邻接关系怎么建立呢?邻居关系通过hello报文来

OSPF建立邻居、邻接关系 学习笔记

Ospf中路由器之间存在两种连接关系:邻居关系和邻接关系.本博文将详细介绍这2种关系建立及工作原理. 如果两台路由器之间共享一条公共数据链路(两台路由器中间没有其它路由器,或者两台路由器之间存在虚连接),并且成功协商了hello包中所指定的参数,那么它们就成为邻居.如果两个邻居之间需要同步LSDB,那么它们之间需要建立邻接关系.如果两个路由器之间建立了邻接关系,那么它们的LSDB一定是同步的.LSA只在存在邻接关系的路由器之间传递. 那么邻居关系和邻接关系怎么建立呢?邻居关系通过hello报文来

BGP邻居路由条目数超限

背景:我们公司用的两条线路,其中一条是电信的MPLS线路,我们需要把路由传给电信的BGP路由,由电信的BGP路由协议进行传递到总部相应的路由表中.问题现象:突然电信的MPLS线路断了,然后NETCARE打电话过来报告故障,我还是以为光纤断了,就让NETCARE安排寻线.过了一段时间,邮件过来了,说我们发布的路由条目超过限制,正常我们是最多只能发布20条. 解决方案:我第一时间连上公司的核心交换机,查看路由发布情况.show ip route eigrp 1感觉没有不正常的路由发布呀.show i