练习题:
南京有一条著名的购物街。购物街嘛,就是一排整齐的商店啦~
导游小 Z 每次都会把游客团带到购物街里走一段,然后选择一个商店进去购物。
小 Z 接待的游客都是购物狂,他们恨不得将店内的商品洗劫一空,也就是说,只要他们能买,就一定会继续买(钱够不够你不用考虑,他们都有信用卡可以透支)。
但是有一点,他们都非常讲究平等、很谦虚,每个人都不能忍受比别人多买什么东西或者少买什么东西,于是他们每个人最后买的商品数量都是一样的。这虽然导致他们没办法每次都把商店搬空,但是每次已经给店家带来一大笔生意了,店家已经非常感谢了!为了表示感谢,店家决定把游客们买完之后剩下来那几件没卖掉的商品就送给导游小 Z 了。
贪心的小 Z 自然希望自己能获赠的商品数量越大越好啦~
现在告诉你这一排共 n
个商店(标号为 0
到 n-1
)每个商店里的商品总数,每次小 Z 会带一批共 p
个游客的旅游团,到其中 u
号商店和 v
号商店之间逛一逛,请你帮小 Z 在所逛的商店区间内选择一个,告诉小 Z 他最多能获赠多少件商品。
第一行,包含两个整数 n,m
,分别表示商店个数和小 Z 带来的旅游团个数。
接下来一行,包含 n
个整数 a_i
,表示第 i
个商店的商品总数。
接下来 m
行,每行三个整数 u,v,p
,表示这个旅游团逛 u
号商店和 v
号商店之间的商店(包含 u
和 v
),且这个旅游团的人数为 p
。
共输出 m
行,每行一个整数,第 i
行输出第 i
个旅游团购物后,小 Z 最多能获赠的商品数量。
5 5
2 4 6 8 10
0 1 2
1 4 3
2 4 2
1 1 9
0 4 7
0
2
0
4
6
第一个旅游团, 2
个人, 0
号商店到 1
号商店的区间。若去 1
号商店,共 2
件商品,每人买 1
件,剩 0
件。若去 2
号商店,共 4
件商品,每人买 2
件,剩 0
件。所以,小 Z 最多获赠 0
件。
第二个旅游团, 3
个人,小 Z 选择带他们去 4
号商店,共 8
件商品,每人买 2
件商品(因为每人 3
件不够),剩下 2
件,小 Z 最多获赠就是 2
件。可以验证去其它商店小 Z 最多获赠的商品不会达到 2
件。
我们知道,求任意图的最大独立集是一类NP完全问题,目前还没有准确的多项式算法,但是有许多多项式复杂度的近似算法。
例如,小 C 常用的一种算法是:
n
个点的无向图,先等概率随机一个 1…… n
的排列 p[1…… n]
。S
,一开始 S
为空集,之后按照 i=1…… n
的顺序,检查 {p[i]}U S
是否是一个独立集,如果是的话就令 S={p[i]}U S
。S
作为答案。小 C 现在想知道,对于给定的一张图,这个算法的正确率,输出答案对 998244353
取模。
第一行两个非负整数 n,m
表示给定的图的点数和边数。
接下来 m
行,每行有两个正整数 (u,v) (u!=v)
描述这张图的一条无向边。
输出正确率,答案对 998244353
取模。
3 2
1 2
2 3
665496236
这张图的最大独立集显然为 2
,可以发现只有 p[1]=2
时会得出 S={2}
,否则都是 S={1,3}
,所以答案是 2/3
。
有一天,NaCly_Fish 无意间看到一种高效求阶乘模大质数的算法,但是她太菜,并不会写。于是她就暴力造了数据,请您帮忙写出 std 吧。
什么,您问为什么不保证模数可以 NTT? 那样的话就可能被打表水过,或者答案就爆 int 了。
反正您是神仙,肯定能秒掉这题。
给你正整数 n
,和一个质数 p
,你需要求出:
n! mod p
有 T
组数据。
第一行一个正整数 T
,表示数据组数。
接下来 T
行,每行两个正整数 n,p
,意义如题目描述。
输出 T
行,表示每组数据的答案。
4
16777216 998244353
72267859 998244353
2333333 19260817
1919810 2147481811
789885751
569626621
16351109
1416439247
珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。
某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。他随机生成一个正整数集合,集合中的数各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和?
最近老师出了一些测验题,请你帮忙求出答案。
共两行,第一行包含一个整数 n
,表示测试题中给出的正整数个数。
第二行有 n
个正整数,每两个正整数之间用一个空格隔开,表示测试题中给出的正整数。
一个整数,表示测验题答案。
4
1 2 3 4
2
【样例说明】
由 1+2=3,1+3=4
,故满足测试要求的答案为 2
。
注意,加数和被加数必须是集合中的两个不同的数。
学习算法
暑假中,MLE 决定学习一下 OI 算法。
暑假一共有 n
天,我们假设 MLE 每天都有足够的时间学 OI。MLE 列出了可供选择的 m
个算法。MLE 每天只能且必须学习一个算法。
而且,MLE 长时间学同一种算法会厌倦,所以每一种算法不能连续学习太多天,第 i
种算法最多可以连续学习 a_i
天。MLE 没有必要学习全部的算法。
MLE 想知道,自己有多少种不同的学习安排来度过这 n
天。两种学习安排不同仅当这两种安排中有至少一天学习的算法不同。因为方法可能过多,你只需要输出方案数对 10^9+7
取模即可。
第一行为两个整数 n,m
。
第二行 m
个整数 a_1,a_2,\cdots,a_m
。
输出一行一个整数,方案数对 10^9+7
取模的结果。
3 2
1 2
4
2 1
1
0
8 5
4 2 3 4 2
356314
第一种算法最多连续学习一天,第二种最多连续学习两天。故共有如下四种学习方式:
1,2,2
。2,1,2
。2,2,1
。1,2,1
。