20170117
T1:
【问题描述】
有一块棋盘,棋盘的边长为 100000,行和列的编号为 1 到 100000。棋盘上
有𝑛个特殊格子,任意两个格子的位置都不相同。
现在小 K 要猜哪些格子是特殊格子。她知道所有格子的横坐标和纵坐标,
但并不知道对应关系。换言之,她只有两个数组,一个存下了所有格子的横坐标, 另一个存下了所有格子的纵坐标,而且两个数组都打乱了顺序。当然,小 K 猜
的𝑛个格子的位置也必须都不相同。
请求出一个最大的𝑘,使得无论小 K 怎么猜,都能猜对至少𝑘个格子的位置。
【输入格式】
输入数据第一行包含一个整数𝑛。 接下来𝑛行,每行描述一个特殊格子的位置。第𝑖行含有两个整数𝑥% 和𝑦𝑖,代
表第𝑖个格子的坐标。保证任意两个格子的坐标都不相同。
【输出格式】
输出一行,包含一个整数,代表最大的𝑘。
题解:题目限制比较明显,最小费用最大流即可;
考试的时候以为类似求所有方案的交集大小,没什么办法,只好贪心骗分;
看错题目,身败名裂;
T2:
题目描述
你有一个n个物品的集合,要从中选出一个k元子集,问你有多少个不同的k元子集。然而这个问题太简单了,所以在这个问题中,这n个物品可能会相同。
但似乎还是太简单了,所以询问如果插入了一个新的元素,那么有多少个不同的k元集。注意这里的询问是独立的,也就是在原集合的基础上加入元素。
注意在这个问题中k元集中的物品可以相同,如果两个k元集不同当且仅当存在一个物品在这两个集合中出现次数不同。
由于答案很大,对998244353取模。
输入格式
输入第一行包含一个正整数n,表示多重集的大小。接下来一行n个整数,表示每个物品的编号,物品编号在1到n之间。接下来一行一个整数q,表示询问个数。接下来q行,每行两个正整数x和k(1<=x<=n,1<=k<=n+1),表示询问将x插到集合中k元集的个数。
输出格式
输出q行,每行一个整数表示询问的答案。
样例输入
6
1 2 2 3 3 3
4
1 2
2 3
3 4
4 5
样例输出
6
7
6
8
数据范围
20%的数据,n<=100,q<=100
40%的数据,n<=5000,q<=5000
另外20%的数据,q=1
100%的数据,n<=100000,q<=100000
生成函数的题目,准备开坑;
T3:
一个序列对应着一张逆序图,逆序图即,在图中,是序列的逆序对的两个节点,有一条边;
要求图中的既是覆盖集,又是独立集的点集的数量;
n<=1000
题解:
在图中考虑覆盖集和独立集是没什么前途的;
考虑转换成序列,在序列中考虑这两个条件;
独立集:由于是逆序图,所以选择的点集需要在序列中递增(递增子序列);
覆盖集:这需要图中每个未选中的点都与一个已选中的点组成逆序对;---------------考试时想到了这一步,接下来用了dfs;
微观的考察,假设现在i是序列中最后一个选中的点,j成为下一个被选中的点需要满足什么条件?
由于覆盖集的要求,序列i-j中,小于a[i]的可以被a[i]满足条件,大于a[i]的则需要a[j]来使他们满足条件(即a[j]<=min(a[k]) ,a[k]>a[i]),而且这个任务只能由a[j]完成(如果a[j]都完不成,后面就更没有能完成任务的点了),这样就可以满足无后效性的要求;
这样就可以dp了,n^2 dp轻松跑过;
我认为比较好的锻炼思维的题目;