2016.09.10【初中部 NOIP提高组 】模拟赛C

来源:互联网 发布:阿里云api 编辑:程序博客网 时间:2024/06/06 13:59

开学了,编程时间少了,写题解的时间就更少了,就不能写得太详细了~


先写一下总结吧:

这次考得分数有点难看,但人品的成分还是比较大滴

第一、第三题,大家的分数都差不多,关键拉分的是第二题

第二题的水法,其实我比赛时已经想到了,但是........

觉得拿分可能性不高,就用了暴力

然后居然爆0了.......

而冯某等人用了水法,居然AC了....orz○| ̄|_


好吧,讲了一大堆废话,开始写题解了


第一题:

https://61.142.113.109/senior/#main/show/3057

3057. 【NOIP2012模拟10.26】电影票 (StandardIO)

【问题描述】

    笨笨当了很久的道路调度员,笨笨也开始想体验生活,从生活中发现数学问题,锻炼自己思维。最近《变形金刚3》,《哈利波特7》同步放映,明显是决战雌雄,已知王府井中一共有n人买了《变形金刚3》的票,m人买了《哈利波特7》的票,并且n>=m,并且电影院中现在只有两种票,每次只有一个人买,(共有n+m次),这n+m次组成一个排列,为了保证每一个人买票时,《变形金刚3》票房都不少于《哈利波特7》,(n个买《变形金刚3》的人之间没区别,m个买《哈利波特7》的人也没区别),笨笨想着到这样的购票方案有多少种。笨笨想了好久都没想出来,所以笨笨找到了你。

【输入格式】

一行两个数n,m(  0<=m<=n<=5000)

Input

【输入格式】

一行两个数n,m(  0<=m<=n<=5000)

Output

【输出格式】

    输出方案种数

Sample Input

1 1

Sample Output

1

Data Constraint

Hint

0<=m<=n<=5000


这道题,其实和义务植树【加强**】http://61.142.113.107:8080/oj/problem.php?id=1224这题很像,

如果单单暴力递推+高精度的话只有10分........

所以我们可以推出一个公式算答案具体怎么推的,我也不知道.... 

答案值

=C(n+m,n)-C(n+m,n+1)

=(n+1-m)*(m+n)!/(m!*(n+1)!)

=(n+1-m)*(m+1)*(m+2)*(m+3)*.......*(m+n)/(n+1)!

但是.....如果这样暴力高精度算的话不但很麻烦,而且还有可能超时

所以,我们可以对(n+1-m)*(m+1)*(m+2)*(m+3)*.......*(m+n)进行分解质因数,

再对(n+1)!进行分解质因数,

之后把两组分解出来的质因数相抵消,

抵消完后(n+1)!那组的质因数一定不再存在

(因为最后的答案肯定是整数,也就是说(n+1-m)*(m+1)*(m+2)*(m+3)*.......*(m+n)能整除(n+1)!,所以(n+1-m)*(m+1)*(m+2)*(m+3)*.......*(m+n)的质因数一定包含(n+1)!),

那么我们就可以把(n+1-m)*(m+1)*(m+2)*(m+3)*.......*(m+n)这组抵消后的质因数高精度相乘,最后就得到答案


第二题:

https://61.142.113.109/senior/#main/show/3058

3058. 【NOIP2012模拟10.26】火炬手 (StandardIO)

【问题描述】

    全运会就要开始了,笨笨想成为湖南地区的火炬手,经过层层选拔,最终到了最后一关,这一关给出了一个正整数n(N<=100000),求一个最小的正整数m,使得n*m的十进制表示形式中只含1和0. 

Input

【输入格式】

    一行一个数n

Output

【输出格式】

    输出一行,如果有解,输出最小的m,否则输出‘no solution’.

Sample Input

12

Sample Output

925



这题用水法就可以过了,

就是用队列生成n*m可能的值,

初值data[i]=1,

之后每次操作就是*10与*10+1两种选择来生成,

之后判断当前的生成值是否能够整除n,

如果能,就输出当前值整除n,否则就一直这样做,

直到找到答案

这题根本不用考虑‘no solution’的情况,因为数据很水..............



第三题:

https://61.142.113.109/senior/#main/show/3059

3059. 【NOIP2012模拟10.26】雕塑 (StandardIO)

【问题描述】

Wcyz为了迎接百年校庆,美化校园,请了校友笨笨将n座雕塑,准备安置在校园内,整个校园可以抽象成一个n*n的大网格,每个1*1网格最多只能安置一座雕塑,但是某些1*1的网格上恰好是一个食堂或湖泊,这些网格是不能安置雕塑的,每个雕塑的造型相同,这样同一种安置方案中交换排列都算一种。任意雕塑在同一行或同一列是不合法的方案。

学校想知道有多少种安置方案,笨笨想从中选择最好的一种方案,笨笨想请你告诉他方

案种数。  

Input

【输入格式】

    第一行,两个整数n,m(n<=20,m<=10),用空格隔开,n表示n*n的大网格,m表示不能安置雕塑的位置

    第二行至m+1行,每行两个数x,y,用空格分开,表示坐标(x,y)的1*1 的网格上不能安置雕塑。

Output

【输出格式】

    一个数,方案种数(方案种数<=2^63-1)

Sample Input

6 7

1 1

2 1

2 2

3 3

3 4

4 3

4 4

Sample Output

184

Data Constraint

Hint

n<=20,m<=10



对于这题来说,单纯爆搜答案的不可能过的~

所以捏

就是可以运用题解上一种神奇的方法

神奇到比赛时是几乎不可能想出来的

rk表示把k个雕塑放在了m个禁区中,

且满足任意两个雕塑不在同一行同一列的方案数

k的范围只要1~m就行

这里直接dfs暴力就好了,就是把所有禁区内的点挑出来,让它们和k个雕塑进行配对...

那么根据容斥原理淘汰原则别问我这是什么鬼,已经严重超纲了

n个雕塑都安置在非禁区内的方案数等于

n!-r1*(n-1)!+r2*(n-2)!-r3*(n-3)!+r4*(n-4)!.......rm*(n-m)!

这玩意照着打就好了,反正我是理解不了的

别管root题解的公式,看我这个就好了,root题解那里的公式有很多很多问题.......

之后你可以把1!~n!的值所有值预处理一下,就方便很多了


0 0
原创粉丝点击