模拟赛
一、题目概览
中文题目名称 |
序列 |
轰炸 |
字符串 |
英文题目名称 |
sequence |
bomb |
string |
可执行文件名 |
sequence |
bomb |
string |
输入文件名 |
sequence.in |
bomb.in |
string.in |
输出文件名 |
sequence.out |
bomb.out |
string.out |
时间限制 |
1s |
1s |
1s |
空间限制 |
256MB |
256MB |
256MB |
测试点数目 |
10 |
10 |
10 |
测试点分值 |
10 |
10 |
10 |
题目类型 |
传统 |
传统 |
传统 |
比较方式 |
全文比较 |
全文比较 |
全文比较 |
是否有部分分 |
否 |
否 |
否 |
二、注意事项:
1.文件名(程序名和输入输出文件名)必须使用小写。
2.C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
3.开启O2优化,栈空间开大至256M。
序列(sequence)
【题目描述】
给定一个1~n的排列x,每次你可以将x1~xi翻转。你需要求出将序列变为升序的最小操作次数。有多组数据。
【输入数据】
第一行一个整数t表示数据组数。
每组数据第一行一个整数n,第二行n个整数x1~xn。
【输出数据】
每组数据输出一行一个整数表示答案。
【样例输入】
1
8
8 6 1 3 2 4 5 7
【样例输出】
7
【数据范围】
对于100%的测试数据,t=5,n<=25。
对于测试点1,2,n=5。
对于测试点3,4,n=6。
对于测试点5,6,n=7。
对于测试点7,8,9,n=8。
对于测试点10,n=9。
对于测试点11,n=10。
对于测试点i (12<=i<=21),n=i。
对于测试点22,23,n=22。
对于测试点24,25,n=23。
轰炸(bomb)
【题目描述】
有n座城市,城市之间建立了m条有向的地下通道。
你需要发起若干轮轰炸,每轮可以轰炸任意多个城市。但每次轰炸的城市中,不能存在两个不同的城市i,j满足可以通过地道从城市i到达城市j。
你需要求出最少需要多少轮可以对每座城市都进行至少一次轰炸。
【输入数据】
第一行两个整数n,m。接下来m行每行两个整数a,b表示一条从a连向b的单向边。
【输出数据】
一行一个整数表示答案。
【样例输入】
5 4
1 2
2 3
3 1
4 5
【样例输出】
3
【数据范围】
对于20%的数据,n,m<=10。
对于40%的数据,n,m<=1000。
对于另外30%的数据,保证无环。
对于100%的数据,n,m<=1000000。
字符串(string)
【题目描述】
给定正整数m以及n个01串s1~sn,你需要求出长度为2m的反对称的包含这n个01串作为子串的01串的个数。对998244353取模。
一个01串s是反对称的当且仅当它对于1<=i<=|s|都满足s[i]≠s[|s|-i+1]。
【输入数据】
第一行两个整数n,m。接下来n行每行一个字符串s1~sn。
【输出数据】
一行一个整数表示答案。
【样例输入】
2 3
011
001
【样例输出】
4
【数据范围】
对于10%的数据,m<=15。
对于40%的数据,n<=4,|si|<=20。
对于60%的数据,n<=6,|si|<=30,m<=100。
对于另外20%的数据,n=1。
对于100%的数据,n<=6,|si|<=100,m<=500。