[jzoj]3456.【NOIP2013模拟联考3】恭介的法则(rule)

Link

  https://jzoj.net/senior/#main/show/3456

Description

  终于,在众亲们的奋斗下,最终boss 恭介被关进了库特设计的密室。正当她们松了一口气时,这个世界却发生了天翻覆地的变化:地面开始下沉,天空开始变成血红色,海水沸腾……一幅世界末日的图景。美鱼从她手中的古籍《若山牧水诗歌集》中发现了原因:白鸟は かなしからずや 空の青 海のあをにも 染まずただよふ 。大(xia)意(shuo)就是狡猾的恭介在创造这个世界的时候就篡改了法则。而这个法则的起源,就是一只生死之间的猫。这个猫被关在一个黑盒子里,盒子里有两个毒气罐,如果有任意一个毒气罐被打开那么猫将会被杀死,法则也能得到纠正。然而外界能控制的仅仅是这两个毒气罐被打开的概率。假设第一个毒气罐被打开的概率为1/x,第二个毒气罐为1/y(x,y 为正整数),那么当两个概率和为1/(n!)时,猫将会被莫名其妙地杀死。现在美鱼想知道,有多少对(x,y)可以让猫被莫名其妙杀死。

Solution

  其实,题目大意可以直接转化成如下一句精炼的话。

  

30分

  显然,因为n太小了,最大只有6,打表都行了,反正我考试时n=6也超时。。

60分

  正解+傻到没打高精度,或者打表。

100分

  我们分解一下题目给出的式子,详见下面过程及讲解

  合并左边的分式可得

  

  通过交叉相乘可得

  

  通过乘法分配律的逆运算得

  

  移项得

  

  通过合并式子得

  

  移项得

  

  分解到这里,我们可以推出下面的式子

  

  x同样可以这样证出来,我考试一直在证这个,其实还是有些乱用的,但是后面才是重点

  根据数学归纳,可以得知,x或y的最大值为n!(n!+1),虽然这没什么卵用

  我们枚举y来确定x,显然

  

  我们将y表示为一般的形式,即y=n!+k(k代表任意符合条件的数),带入前面的式子中,得

  

  合并同类项化简得  

  

  因为x是整数,所以n!n!+kn!必定为k的倍数,因为kn!是k的倍数,故不必考虑第二个多项式,我们只要考虑第一个多项式,即满足如下条件

  

  这样,答案就转化成求n!n!的约数个数了

  快速求n!的约数个数和分解质因子出来的式子(包括质因子和其指数),可以看我写的博客,链接如下

  (当成这里是有链接)

  显然,我们知道一个数分解质因子出来的式子,那么这个数的平方的式子同样可以得出来,不过就是指数都乘2罢了

  约数个数的公式就不用说了吧,小学一年级我就会了。

  这里算约数个数需要高精度。

  因为有时间限制,所以高精度要加常数优化,诸如低精度乘高精度,压位,延迟去乘法等

  问题迎刃而解了,考试时我以为很屌很屌,实际上真的很屌很屌,我数学不好,特别是这种分解的然后用的数代替成一般形式的,Orz lyl,dyp,wmz大佬

Code

var
        now:int64;
        n,i,j,num,tot:longint;
        a:array[0..4363] of int64;
        bz:array[0..700000] of 0..1;
procedure gg(x:int64);
var
        i,len:longint;
begin
        for i:=1 to a[0] do
                a[i]:=a[i]*x;

        len:=a[0];
        i:=1;

        while i<=len do
        begin
                a[i+1]:=a[i+1]+a[i] div 10000000000;
                a[i]:=a[i] mod 10000000000;

                if (a[i+1]>0) and (i+1>len) then
                        inc(len);

                inc(i);
        end;

        a[0]:=len;
end;
begin
        readln(n);

        a[0]:=1;
        a[1]:=1;
        now:=1;

        for i:=2 to n do
                if bz[i]=0 then
                begin
                        for j:=1 to n div i do
                                bz[i*j]:=1;

                        num:=n;
                        tot:=0;

                        while num>=i do
                        begin
                                num:=num div i;

                                inc(tot,num);
                        end;

                        tot:=tot*2+1;

                        if now*tot>100000000 then
                        begin
                                gg(now);

                                now:=1;
                        end;

                        now:=now*tot;

                end;

        if now<>1 then
                gg(now);

        write(a[a[0]]);

        for i:=a[0]-1 downto 1 do
                if a[i]>=1000000000 then write(a[i]) else
                if a[i]>=100000000 then write(‘0‘,a[i]) else
                if a[i]>=10000000 then write(‘00‘,a[i]) else
                if a[i]>=1000000 then write(‘000‘,a[i]) else
                if a[i]>=100000 then write(‘0000‘,a[i]) else
                if a[i]>=10000 then write(‘00000‘,a[i]) else
                if a[i]>=1000 then write(‘000000‘,a[i]) else
                if a[i]>=100 then write(‘0000000‘,a[i]) else
                if a[i]>=10 then write(‘00000000‘,a[i]) else
                                write(‘000000000‘,a[i]);
end.
时间: 2024-10-04 18:31:32

[jzoj]3456.【NOIP2013模拟联考3】恭介的法则(rule)的相关文章

【2017杭二联考】穿越矩形

P2554 - [2017杭二联考]穿越矩形 Description 题目背景: 幻想乡的创始人之一,八云紫,有着强大的控制结界的能力,可以瞬间消除一定范围内 所有弹幕.我们可以将其消除范围视为一个矩形,而弹幕可以视为动点. 八云紫想要嘲讽她的敌人,所以她希望只使用一次消除能力,尽可能多地消除弹幕. 请你告诉她,在哪一时刻使用道具,可以消除尽可能多的弹幕. 问题描述: 在平面上给定一个矩形区域(也可能退化成线段或者点). 矩形的边与坐标轴平行,左下端 点为 (xl,yl),右上端点为 (xr,y

jloi2017(shoi2017?)六省联考酱油记

Day -n 听说了4.22.4.23的省选,而且还是六省联考. 压力山大. 尽管我只是一名高一的simple OIer,在省选到来之前,心里还是很紧张的. 毕竟自己也知道南方dalao们都是神犇,像我这种巨蒻能考成什么样还很不好说. 感觉当时的紧张气氛堪比中考前. Teacher:这次省选就是让你们体验一下考试氛围的,并没有指望你们有多好的成绩,自己写好暴力就行了,不必非要写正解. 嗯,我本来就是去打酱油的,不在乎成绩. 考试前几天敲敲模板,博客也不写了,全力准备考试. Day 0 考前的晚上

3.5~3.6联考题解

本来想加个密码的,后来一想全HE就咱们这几个人,外省的dalao愿看也没事儿,就公开算了,省得加密码各种麻烦. 先补这两天的题解吧--如果有空的话我可能会把上次联考的题解补上= =(中午没睡觉,现在困得很,根本没法写题-- 算算算number 感觉出题人出题的时候zz了吧,费了半天搞出来一个极其麻烦还跑得慢的做法是要闹哪样啊-- 算了,写一写$O(nk)$做法的推导过程吧,虽然其实非常好推-- 首先定义$S_i$表示到$1~i$位置的前缀和,并且规定$S_0=0$,那么 \begin{align

六省联考:组合数问题

4870: [Shoi2017]组合数问题 2017-09-03 Description Input 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ r < k ≤ 50, 2 ≤ p ≤ 2^30 ? 1 Output 一行一个整数代表答案. INPUT_1 2 10007 2 0 INPUT_2 20 10007 20 0 OUT_1 8 OUT_2 176 并不知道这个是什么玄学(组合数),但是这个题并不是裸组合数,因为联考时用组合数递

【2017杭二联考】 图的有向环

P2555 - [2017杭二联考]图的有向环 Description 题目背景: 幻想乡的亡灵公主,西行寺幽幽子,在幻想乡很受欢迎,经常有妖怪来拜访她,但是幽 幽子并不喜欢被打扰,她希望从白玉楼出发,散步之后再回到白玉楼,同时路上遇到的妖怪 越少越好(有趣的是道路两边的妖怪数量并不相同,分别从两个方向经过同一条道路遇到的 妖怪数量是不同的).当然,作为冥界的公主,她是不会重复经过同一条道路的. 问题描述: 给定一个有 n 个点 m 条无向边的图,每条无向边最多只能经过一次. 对于边(ui, v

8.9联考题解

今天的题有质量多了,尤其是第一题不再毫无意义,果然考这样的试比较有收获. 时间限制:1sec  内存限制:128MB 题解       刚开始看的时候没有思路.不过这样的考试才叫正常嘛,前两天T1那是什么玩意= =.边读题边写前缀和.离散之类的词,但是前缀和并不能处理出题目中所要求的情况,3*10^5大概最多nlogn.举了几个例子,发现好像和后面大于它的数有关,想了想怎么求它后面大于它的数字个数,过了一会猛然发现我举的例子也太特殊了,全都是单调递增的,有点挫败,就去做后面的题了.T2做了很久还

10.29 FJ四校联考

//四校联考Rank 16 感觉很滋磁 (虽然考的时候抱怨厦门一中出的数学题很NOIP///) 圈地 [问题描述] n根长度不一定相同的木棍,至多可以对其中一根切一刀,然后用其中的任意根围一个三角形,求三角形的最大面积.设面积为S,输出16*S^2对998244353取模后的答案.特别地,无解输出-1. 注:退化的三角形(面积为零)不被认为是三角形,答案应该为-1. [输入文件] 输入文件为tri.in. 输入文件第一行包含两个正整数n和998244353. 第二行包含n个正整数,表示每根木棍的

bzoj千题计划265:bzoj4873: [六省联考2017]寿司餐厅

http://www.lydsy.com/JudgeOnline/problem.php?id=4873 选a必选b,a依赖于b 最大权闭合子图模型 构图: 1.源点 向 正美味度区间 连 流量为 美味度 的边 2.负美味度区间 向 汇点 连 流量为 美味度的绝对值 的边 3.区间[i,j] 向 区间[i+1,j].区间[i,j-1] 连 流量为 inf 的边 4.区间[i,i] 向 寿司i 连 流量为 inf 的边 5.寿司i 向 汇点 连 流量为 寿司代号 的边 6.寿司i 向 它的代号 连

bzoj千题计划266:bzoj4872: [六省联考2017]分手是祝愿

http://www.lydsy.com/JudgeOnline/problem.php?id=4872 一种最优解是 从大到小灯有亮的就灭掉 最优解是唯一的,且关灯的顺序没有影响 最优解 对每个开关至多操作1次,(连带着的灯的亮灭改变不算) 设最优解 需要操作cnt次,那么就有cnt盏灯是正确的选择 设 f[i] 表示 有i种正确的选择  变为 有i-1种正确的选择 的 期望次数 那么在n盏灯中,有i盏灯操作1次 就可以 减少一次正确选择 有n-i盏灯是错误的选择,选了它还要把它还原,还原它也