1.noip2015 子串
1 |
|
1 | #include<bits/stdc++.h> |
写这篇博客,异常想吐槽。题目名竟然是“简,单,题”,但题一点也不简单qwq.
【问题描述】
一天 fateice 给了 fjzzq2002 一道简单题。
定义“n-好排列”为 1 到 n 的排列中,满足任何一个数都比前面的所有数大或者小。
比如“1 2 3 4”就是一个“4-好排列”,而“4 3 1 2”就不是一个“4-好排列”。
给出 n,求“n-好排列”个数。
fjzzq2002 一眼秒了,加了多组数据,把题目扔给了你。
良心出题人为了输出方便,加了答案对 p 取模。
【输入格式】
输入文件名为 jian.in。
第一行,一个数 T,表示数据组数。
接下来 T 行,每行两个数, n 和 p,含义如题所示。
【输出格式】
输出文件名为 jian.out
对于每组数据,一个数,表示答案。
输入:
2
233
10 233
输出:
2
46
【数据规模与约定】
对于 30% 的数据, 1 ≤ n ≤ 10;
对于 60% 的数据, 1 ≤ n ≤ 106, 1 ≤ p ≤ 109;
对于 100% 的数据, 1 ≤ n, p ≤ 1018, 1 ≤ T ≤ 104。
1 | #include<cstdio> |
【问题描述】
fateice 扔给了 fjzzq2002 一个长度为 n 的正整数序列,要让他排好序。
因为这太简单,所以 fjzzq2002 只能用规定的两种操作来将这个序列排成升序。
1. 将相邻的两个数调换位置,也就是𝑎𝑖, 𝑎𝑗变成𝑎𝑗, 𝑎𝑖。
2. 将连续的三个数调换位置,也就是𝑎𝑖, 𝑎𝑗, 𝑎𝑘变成𝑎𝑘, 𝑎𝑗, 𝑎𝑖。
其中, 𝑖, 𝑗(, 𝑘)必须满足条件(相邻/连续)。
由于使用操作 1 很累,所以 fjzzq2002 想要尽可能少的使用操作 1,你需要求出将这个
序列排成单调上升最少需要的操作 1 的次数。数据保证序列中不存在相同的两个数。
【输入格式】
输入文件名为 swap.in。
第一行,一个数 n,表示序列长度。
第二行, n 个互不相同的正整数,表示这个正整数序列。
【输出格式】
输出文件名为 swap.out
一行,一个数,表示答案。
输入:
4
1 4 2 3
输出:
1
【数据规模与约定】
对于 30% 的数据, 1 ≤ 𝑛 ≤ 10;
对于 60% 的数据, 1 ≤ 𝑛 ≤ 10^3;
对于 100% 的数据, 1 ≤ 𝑛 ≤ 10^5, 1 ≤ 𝑎𝑖 ≤ 10^9。
1 | #include<bits/stdc++.h> |
操作二暗示奇数编号可以在奇数编号随意移动,偶数一样。所以排序记录每个数之前的位置。如果当前位置的奇偶性与之前不符,ans++,最后ans/=2;
直接上代码。。。
1 | #include<bits/stdc++.h> |
有题目可得所求点为树的重心,然后得解。
1 | #include<cstdio> |
若是求最大的题,一般将其转换为a-b<=c,将b->a连一条边权为c的边,若答案有环,则无解,答案等于INF,无数解,否则唯一解。
题目描述
众所周知, Pb 是位大神犇,时不时就去 BZOJ 啊 codeforces 啊什么的玩玩,
这次无聊刷(nue)题的时候看到了一道奇怪的题目:
给你一个数 n 和有 n 个非负整数的数组 a , 求
Max{(j- i+1)*Min{a[k]| (i<=k<= j)}| (1<=i<=n,i<= j<=n)}
题目如此简短, Pb 神犇很快就看完了,看完之后大呼一声:“水题!”不出 5min就把这题给秒了,于是对出题人说:“快来秒这道水题!”
然而出题人是个 SB,显然没有 Pb 那么神,完全做不出,所以请你来帮忙咯。
输入格式
一个整数 n。
接下来一行,共 n 个非负整数,代表 a 数组。
输出格式
输出应该只有一个非负整数,代表答案。
样例输入
1 3
样例输出
3
数据范围
对于 10%的数据, 1<=n<=2000
对于 20%的数据, 1<=n<=500000
对于另 30%的数据, n=4000000,保证 a 数组是非严格递增或非严格递减
对于 100%的数据, 1<=n<=4000000, 0<a[i]<=1000000000
1 | #include<bits/stdc++.h> |
用单调栈来维护一个单调上升序列,每当当前元素小于栈顶元素,更新答案并弹出栈顶。
1 | #include<bits/stdc++.h> |
(flame.cpp)
【时空限制】
时间限制:1s
空间限制:128MB
【问题描述】
“谁都无法相信未来,谁都无法接受未来。”
“越是重复,就越是偏离你和我生活过的时间。心意也相互偏离,言语也渐渐无法相通。
我想我大概早已经迷路了。
“要拯救你,这是我最初的心意,而到如今,这是最后留下的唯一路标。”
“轮回,无论几次,我依然选择轮回,无数次的探寻,寻找唯一的出口,寻找能将你从
绝望命运中拯救出来的道路。鹿目圆,我唯一的朋友,为了你,即使陷入永恒的迷宫,我也
会毫不介意!”
“这才是人类情感的极致,比希望更火热,比绝望更深切的东西——是爱。”
晓美焰为了拯救自己唯一的朋友鹿目圆,使之避免称为魔法少女的命运,在平行时空中
不断地穿梭轮回。
假设有 N 个平行时空,每时空都有一个维数,编号为 i 的时空的维数是𝑎,为了避免
跨越维数相差较大的时空引起自身的毁灭,晓美焰每次只能跨越维数相差不超过 D 的时空。
晓美焰可以从任意一个时空开始跨越,且只能从编号较小的时空跨越到编号较大的时空,
求她能跨越的最大时空数。
【输入格式】
第一行两个正整数 N,D
第二行 N 个整数表示编号为 i 的时空的维度𝑎
【输出格式】
一个整数表示答案
【输入输出样例 1】
flame.in
6 3
5 7 3 6 10 9
flame.out
4
【输入输出样例 2】
flame.in
8 6
4 7 9 5 8 1 9 10
flame.out
7
【数据范围】
对于 30%的数据,N ≤ 10
对于 60%的数据,N ≤ 2000
对于 100%的数据,N, |𝑎i| ≤ 10^5, 0 ≤ D ≤ 100//注意a可小于零