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轻松跑过;

我认为比较好的锻炼思维的题目;

 

posted @ 2017-01-17 20:14  CHADLZX  阅读(307)  评论(0编辑  收藏  举报