牛客网刷题

1、某高校计算机学院要新建3个实验室,每个实验室有25台主机,已申请了一个C类地址192.168.10.0,该C类地址的子网掩码为()

255.255.255.224

解析:

地址总共32位,c类地址默认掩码24位,也就是32位前面24个1,最后8位用于子网断。25个ip需要至少5个位表示,最后8位剩下前3位用于表示网段。所以最后八位1110 0000,转成十进制224

2、 MTU与分片
根据网络使用的技术不同,每种网络都规定了一个帧最多能够携带的数据量,这一限制称为最大传输单元(MTU)。因此,一个IP数据报的长度只有小于或等于一个网络的MTU时,才能在这个网络中进行传输。为了解决这一问题,IP互联网通常采用分片与重组技术。当一个数据报的尺寸大于将发往网络的MTU值时,路由器会将IP数据报分成若干较小的部分,称为分片,然后再将每片独立地进行发送。在接收到所有分片的基础上,主机对分片进行重新组装的过程称为IP数据报重组。

3、现在假设对N个元素的链表做顺序查找时,若查找每个元素的概率相同,则平均查找长度为(   )?

第一个数的比较次数为1,第二个数的比较次数为2。。。以此类推第N个数的比较次数为N,所以总的比较次数为1+2+...+N=N(N+1)/2,平均比较次数为(N+1)/2,也即平均查找长度。

4、Python 使用_init_()作为构造方法

5、关于Linux下面说法正确的是?

可以使用一般身份用户执行ifconfig eth0指令   √
可以将“.”加入到PATH的查询目录中    √
init是linux启动的第一个进程       √
linux操作系统可以对目录进行硬链接

6、创建文件时,权限值默认最高为666;创建目录时最高值才是777,这里创建的是文件,所以应该是666-022,644

7、使用>>指令向文件追加内容,原内容将保存。

使用>指令覆盖文件原内容并重新输入内容,若文件不存在则创建文件。

8、吃葡萄

有三种葡萄,每种分别有a,b,c\mathit a,b,ca,b,c颗。有三个人,第一个人只吃第1,2\text 1,21,2种葡萄,第二个人只吃第2,3\text 2,32,3种葡萄,第三个人只吃第1,3\text 1,31,3种葡萄。
适当安排三个人使得吃完所有的葡萄,并且且三个人中吃的最多的那个人吃得尽量少。

输入描述:

第一行数字T\mathit TT,表示数据组数。

接下来T\mathit TT行,每行三个数a,b,c\mathit a,b,ca,b,c

1≤a,b,c≤1018,1≤T≤101 \leq a,b,c \leq 10^{18} , 1 \leq T \leq 101≤a,b,c≤1018,1≤T≤10

 

输出描述:

对于每组数据,输出一行一个数字表示三个人中吃的最多的那个人吃的数量。

示例1

输入

2
1 2 3
1 2 6

输出

2
3

 

 9、跳柱子

链接:https://www.nowcoder.com/questionTerminal/f02fe9dda1c443bdbe14b5775727124f?orderByHotValue=0&questionTypes=000100&page=1&onlyReference=false
来源:牛客网
 

小易有n\mathit nn根柱子,第i\mathit ii根柱子的高度为hi\mathit h_{i}hi​。一开始小易站在第一根柱子上。小易能从第i\mathit ii根柱子跳到第j\mathit jj根柱子,当且仅当hj≤hih_{j} \leq h_{i}hj​≤hi​且1≤j−i≤k1 \leq j - i \leq k1≤j−i≤k。其中k\mathit kk为指定的一个数字。
另外小易拥有一次释放超能力的机会。这个超能力能让小易从柱子i\mathit ii跳到任意满足1≤j−i≤k1 \leq j - i \leq k1≤j−i≤k的柱子j\mathit jj而无视柱子高度的限制。
现在小易想知道,小易是否能到达第n\mathit nn根柱子。

 

输入描述:

第一行数据组数T\mathit TT

对于每组数据,第一行数字n,k\mathit n,kn,k,接下来一行n\mathit nn个数字表示hi\mathit h_{i}hi​.

1≤n≤1000,1≤hi≤109,1≤T≤10,1≤k≤n1 \leq n \leq 1000 , 1 \leq h_{i} \leq 10^9 , 1 \leq T \leq 10 , 1 \leq k \leq n1≤n≤1000,1≤hi​≤109,1≤T≤10,1≤k≤n

 

输出描述:

对于每组数据,输出YES或NO

示例1

输入

1
5 3
6 2 4 3 8

输出

YES
链接:https://www.nowcoder.com/questionTerminal/f02fe9dda1c443bdbe14b5775727124f?orderByHotValue=0&questionTypes=000100&page=1&onlyReference=false
来源:牛客网

#include 
#include 
#include 
 
#define MAX_N 1000+100
int T;
int N, k;
int H[MAX_N];
int dp[MAX_N][3];
 
 
int main()
{
 
    scanf("%d", &T);
    while (T--)
    {
        memset(dp, 0, sizeof(dp));
        dp[0][1] = 1;
        dp[0][0] = 1;
        scanf("%d%d", &N, &k);
        for (int i = 0; i < N; i++)
        {
            scanf("%d", &H[i]);
        }
 
        for (int i = 1; i < N; i++)
        {
            for (int j = 1; j <= k; j++)
            {
                if (i - j >= 0 && H[i] <= H[i-j]) {
                    dp[i][0] |= dp[i - j][0];
                    dp[i][1] |= dp[i - j][1];
                }
 
                dp[i][1] |= dp[i - j][0];
                 
                 
            }
        }
 
        if (dp[N - 1][0] || dp[N - 1][1])
            printf("YES\n");
        else
            printf("NO\n");
    }
 
 
    return 0;
}

 10、小易的公司一共有名员工, 第个人每个月的薪酬是万元。
现在小易的老板向小易提了次询问, 每次询问老板都会给出一个整数, 小易要快速回答老板工资等于的员工的数量。

链接:https://www.nowcoder.com/questionTerminal/3afd4298eaa54ac7a0911d2d75f3f565
来源:牛客网
 

输入描述:

第一行,两个空格间隔的整数n\mathit nn和m\mathit mm,表示人数和提问的次数 
第二行,n\mathit nn个用空格间隔的整数xix_ixi​,表示每名员工的薪酬

接下来有m\mathit mm行,每行一个整数,表示老板的一次提问。

1<=m<=80000,1<=n<=100000,1<=xi<=500,000,0001<=m<=80000 ,1<=n<=100000 ,1<=x_i<=500,000,0001<=m<=80000,1<=n<=100000,1<=xi​<=500,000,000

输出描述:

m行,每行一个整数,表示对应提问的答案

示例1

输入

7 4
6 2 1 2 6 2 5
6
5
8
2

输出

2
1
0
3

11、积木

链接:https://www.nowcoder.com/questionTerminal/ea786bfaf4004040a1ffca8c67be5b77
来源:牛客网

小易有n\mathit nn堆积木,第i\mathit ii堆积木有hih_{i}hi​块。小易还拥有一个容量无限的背包。
一开始小易站在第一堆积木旁边。每次小易可以选择进行下列三种操作中的一种:
1、从背包里掏出一块积木(如果有的话)放到当前这一堆里
2、从当前这一堆积木里掏出一块塞到背包里(如果当前积木堆不为空的话)
3、从当前这一堆走到下一堆。
一开始小易的背包里有m\mathit mm块积木。小易希望把这些个积木变成严格递增的(即h1

链接:https://www.nowcoder.com/questionTerminal/ea786bfaf4004040a1ffca8c67be5b77
来源:牛客网
 

输入描述:

第一行数据组数T

对于每组数据,第一行数字n,m\mathit n,mn,m,接下来一行n\mathit nn个数字表示hih_{i}hi​.

1≤n≤100000,0≤hi≤109,1≤T≤10,0≤m≤1091 \leq n \leq 100000 , 0 \leq h_{i} \leq 10^9 , 1 \leq T \leq 10 , 0 \leq m \leq 10^91≤n≤100000,0≤hi​≤109,1≤T≤10,0≤m≤109

 

输出描述:

对于每组数据输出一行,输出结果YES或NO

示例1

输入

1
5 3
2 2 3 3 1

输出

YES
t = int(input())
for _ in range(t):
    n, m = list(map(int, input().split()))
    li = list(map(int, input().split()))
    cur = m
    flag = True
    for i in range(n):
        if li[i] > i:
            cur += li[i] - i
        elif li[i] < i:
            if cur < i - li[i]:
                flag = False
                break
            cur -= i - li[i]
    if flag:
        print('YES')
    else:
        print('NO')

 

 

 

 

 

你可能感兴趣的:(剑指offer)