2019.7.7 练习题
Posted cocacolalala
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2019.7.7 练习题相关的知识,希望对你有一定的参考价值。
A. IP 网络 | ||
|
问题描述
可以用一个网络地址和一个子网掩码描述一个子网(即连续的 IP 地址范围)。
其中子网掩码包含 32 个二进制位,前 32-n 位为 1,后 n 位为 0,网络地址的前 32-n 位任意,后 n 位为 0(0<=n<=32) 。 所有前 32-n 位和网络地址相同的 IP 都属于此网络。
例如,网地址为 194.85.160.176(二进制为 11000010 01010101 10100000 10110000), 子网掩码为 255.255.255.248(二进制为 11111111 11111111 11111111 11111000),则该 子网的 IP 地址范围是 194.85.160.176~194.85.160.183。
现在输入一些网络地址,请你求出包含所有地址的最小的网络(即包含 IP 地址最少的网络)。
输入格式
第一行为一个整数 m,
接下来的 m 行,每行一个 IP 地址,可能有多个相同的地址出现。
输出格式
出两行,表示包含所有输入的 IP 地址的最小网络,第一行是网络地址,第二行是子网掩码。
这道题是很明显的二进制了 ,但是考试时觉得输入输出特别麻烦就先看的b题
题解:
B.排列 | ||
|
问题描述
将自然数 1 到 n 任意排列,然后在排列的每两个数之间根据他们的大小关系插入“>”和“<”。 例如:对于 1..5 的一个排列:3 2 4 1 5,可得到:3 > 2 < 4 > 1 < 5,其中有两个“>”和 2 个“<” 。 现在给出自然数 n,问在自然数 1..n 的所有排列中,有多少个排列恰好有 k 个“<”。 请你解答这个问题。
输入格式
包含多组数据。第一行一个整数 T,表示有 T 组数据。
每组数据的占一行,包含两个整数 n 和 k,它们之间用一个空格分开。
输出格式
共 T 行,每组数据输出一行,每行一个整数,表示对应输入的排列数,这个数如果很大,则需要 输出 mod 1000000007 的结果。
#include<bits/stdc++.h> using namespace std; long long f[1005][1005],mod=1000000007; int main() long long t,n,k; cin>>t; for(int i=1;i<=1000;i++) f[i][0]=1; for(int i=1;i<=1000;i++) for(int j=1;j<=1000;j++) f[i][j]=(f[i-1][j-1]*(i-j)+f[i-1][j]*(j+1))%mod; for(int i=1;i<=t;i++) cin>>n>>k; cout<<f[n][k]%mod<<endl;
C.可爱的猴子 | |
|
问题描述
树上有n只猴子。它们编号为 1 到n。1 号猴子用它的尾巴勾着树枝。剩下的猴子都被其他的猴子用手抓着尾巴(猴子都是头朝下尾巴朝上)。
每只猴子的每只手可以抓住另一只猴子的尾巴。
从0 时刻开始,每一秒都有一只猴子松开它的一只手。这会导致一些猴子掉到地上(它们在地上也能继续松开它们的手,猴子落地的时间很短可以不计)。
你的任务是: 写一个程序,从标准输入读入猴子间抓与被抓住的关系信息,和它们放开手的顺 序,对于每一只猴子算出它落地的时间,把结果输出到标准输出。
输入格式
第一行有两个正整数n和m。n是猴子的数量,m是我们观察猴子的时间(单位为秒)。
接下来n行是初始情 况的描述。第k+1 行有两个整数表示第k个猴子抓住的猴子的编号,前一个数 代表左手抓的猴子的编号,后一个数是右手抓的猴子的编号。如果读入的数为-1 则代表猴子的手是空的。
接下来m行是对猴子观察的结果。在这m行里的第i行,有两个整数。前一个是猴子的编号,后一个是它在时刻i−1 时松开的手的编 号(1-左手,2-右手)。
输出格式
输出n个整数,每行一个。第i行表示第i个猴子落地的时间,如果在观察结束前猴子没有落地,那么输出-1
题解: 用并查集
由于并查集只能合并和查询 所以反向思考 何时牵手何时放手
每次如果father死得更早就更改 从下往上 方可解题
以上是关于2019.7.7 练习题的主要内容,如果未能解决你的问题,请参考以下文章