奇信安笔试1.63

第一题比较简单,但是老夫一万年没写过c++了啊,写了第二题现搜的c++怎么读输入,ac了
#include<iostream>
#include<math.h>
using namespace std;
int main(int argc,char**argv)
{
    int m,n,k;
    cin>>m;

    int i = 0;
    int total = (int)pow(2.0, (double)m) - 1;
    int r[total+1];
    for(;i< total;i++)
        cin>>r[i+1];
    cin>>n;
    cin>>k;
    int n_i = 1;
    int m_i = 1;

    while(r[n_i]!=n){
        if(r[n_i]<n){
            n_i = n_i * 2 + 1;
        }else{
            n_i = n_i* 2;
        }
        if(n_i>=total){
            cout << -1;
            return 0;
        }
    }
    while(r[m_i]!=k){
        if(r[m_i]<k){
            m_i *= 2;
            m_i += 1;
        }else{
            m_i *= 2;
        }
        if(m_i>total){
            cout << -1;
            return 0;
        }
    }
    int max_ = 1;
    int min_ = 1;
    if(m_i == n_i){
        cout << r[m_i] << endl;
        return 0;
    }
    if(m_i > n_i){
        max_ = m_i;
        min_ = n_i;
    }else{
        max_ = n_i;
        min_ = m_i;
    }

    while(max_ > min_){
        max_ /=  2;
        if(max_ == min_){
            cout << r[min_] << endl;
            return 0;
        }
    }
    while(1){
        if(max_ == min_){
                cout << r[min_] << endl;
            return 0;
        }
        if(max_ < min_){
            min_ /= 2;
        }else{
            max_ /= 2;
        }
    }
    return 0;
}
第二题就很恶心了,对了63%,剩下的运行时错误了,很烦。
from collections import defaultdict, Counter
from queue import deque
import sys
line = sys.stdin.readline()
lines = sys.stdin.readlines()
l = []
for  i in range(len(lines)-1):
    l.append(list(map(int, lines[i].strip().split())))
init = list(map(int, lines[-1].strip().split()))

from_which = defaultdict(set)
q = deque()
visited = set()
for i in init:
    q.append(i)
    visited.add(i)
    from_which[i].add(i)

while q:
    cur = q.popleft()
    for i, v in enumerate(l[cur]):
        if v == 1 and i != cur:
            from_which[i] = from_which[i].union(from_which[cur])
            if i not in visited:
                q.append(i)
                visited.add(i)
result = []
for k in from_which:
    if len(from_which[k]) == 1:
        result.append(list(from_which[k])[0])

# init = list(filter(lambda x: len(from_which[x]) == 1, init))
c = Counter(result)

r = 0
m = 0
for i in init:

    if len(from_which[i]) == 1 and c[i] > m:
        r = i
        m = c[i]
print(r)



#奇安信##笔试题目#
全部评论

相关推荐

爱看电影的杨桃allin春招:我感觉你在炫耀
点赞 评论 收藏
分享
去B座二楼砸水泥地:不过也可以理解,这种应该没参加过秋招
点赞 评论 收藏
分享
点赞 2 评论
分享
牛客网
牛客企业服务