洛谷P4204 [NOI2006]神奇口袋 数论
正解:数论
解题报告:
传送门
第一次用\(\LaTeX\)和\(markdown\),,,如果出了什么锅麻烦在评论跟我港句QAQ
\(1)x_{i}\)可以直接离散
\(2)y_{i}\)的顺序对结果麻油影响
事实上从上面两个结论就可以得到这题的正解,,,
直接按顺序读入然后每次对\(a_{y_{i}}+=d\)就好
下面写证明,,,
先证第一条趴\(QwQ\)
假设在第\(k\)步的时候,各个球的数量是\(a_{1},a_{2},a_{3}...a_{n}\),总数是\(sum\)
然后在第\(k+1\)步想拿到颜色\(y\)的概率就会是
第\(k\)步拿到了颜色\(y:\frac{a[y]}{sum}*\frac{a[y]+d}{sum+d}\)
加上
第\(k\)步麻油拿到颜色\(y:\frac{sum-a[y]}{sum}*\frac{a[y]}{sum+d}\)
化简一下可得答案就\(\frac{a[y]}{sum}\)
然后数学归纳法可得如果麻油任何约束的话就每次的答案一定都是\(\frac{a[y]}{sum}\)了,也就是说\(x_{i}\)可以直接离散
但是这里之前\(gql\)傻逼了好久,,,一直麻油想通,,,这里的建议是,如果能想通当然是最好,没想通的话可以多考虑一轮这样的,,,这样就能懂了,,,
不想举\(eg\)了太难打了,,,我发现虽然\(latex\)配上\(markdown\)真的很好看但真的好耗时间,,,自己手推下第\(k+2\)步想拿到的颜色\(y\)的概率就好
啊这儿说下,,,上面说的是到第\(k\)步的时候,各个球的数量是\(a_{1},a_{2},a_{3}...a_{n}\)嘛,,,但其实只是为了方便推,,,这儿的\(a_{1},a_{2},a_{3}...a_{n}\)的真实含义其实是一开始的时候给的\(\left \{ a \right \}\)数组,,,
然后第二条,,,其实还挺好证明的来着QwQ
就现在从第一条我们已经可以得到一个接近正解的解法了,,,就直接读入\(x_{i}\),离散化一下,然后按顺序做就好QwQ
但是还可以再改进下,,,就,如果能证明\(y_{i}\)的顺序对结果麻油影响,就可以直接读入然后直接做就好,,,
下面随便证下
设对\(\left \{ x \right \}\)数组排序之后得到的两个相邻的\(y\)进行交换,显然如果能证明这两个\(y\)交换对结果不产生影响,就能证这一条了
现在假设这两个条件分别是\(\left ( x_{1},y_{1} \right ),\left ( x_{2},y_{2} \right )\)
如果\(y_{1}=y_{2}\),显然麻油问题,不讲
现在只要证\(y_{1}\neq y_{2}\)时是成立的就欧克了鸭,,,
设\(P_{1}\)表示以\(\left ( x_{1},y_{1} \right ),\left ( x_{2},y_{2} \right )\)顺序排的\(ans\),\(P_{w}\)表示以\(\left ( x_{2},y_{2} \right ),\left ( x_{1},y_{1} \right )\)顺序排的\(ans\)
不难得\(P_{1}=\frac{a_{y_{i}}}{sum}*\frac{a_{y_{i+1}}}{sum+d},P_{2}=\frac{a_{y_{i+1}}}{sum}*\frac{a_{y_{i}}}{sum+d}\)
所以显然可以得到\(P_{1}=P_{2}\)
得证√!
啊对了还有个小\(tip\)这儿港下,,,就这题因为范围比较大,就要高精,然后就在最后的化简的时候要写高精除,,,所以可以先分解质因数,然后就只要做高精乘就欧克了,,,
\((ps:markdown\)和\(\LaTeX\)打起来真滴好爽,,,虽然\(real\)耗时但我好爱啊\(TT\)
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define gc getchar()
#define ri register int
#define rc register char
#define rb register bool
#define rp(i,x,y) for(ri i=x;i<=y;++i)
#define my(i,x,y) for(ri i=x;i>=y;--i)
#define e(i,x) for(ri i=head[x];i;i=edge[i].nxt)
const int N=20000+10,M=50+10;
int pr[N],pr_cnt,isn_pr[N],n,m,d,a[N],sum,mul[N],divv[N];
struct Bigint
{
int num[N],num_cnt;
Bigint(){num[1]=1;num_cnt=1;}
il void multi(int x)
{
rp(i,1,num_cnt)num[i]*=x;
rp(i,1,num_cnt)num[i+1]+=num[i]/10,num[i]%=10;
while(num[num_cnt+1])++num_cnt,num[num_cnt+1]=num[num_cnt]/10,num[num_cnt]%=10;
}
il void output(){my(i,num_cnt,1)printf("%d",num[i]);}
}as1,as2;
il int read()
{
rc ch=gc;ri x=0;rb y=1;
while(ch!='-' && (ch>'9' || ch<'0'))ch=gc;
if(ch=='-')ch=gc,y=0;
while(ch>='0' && ch<='9')x=(x<<1)+(x<<3)+(ch^'0'),ch=gc;
return y?x:-x;
}
il void prepri()
{
isn_pr[1]=1;
rp(i,2,N-10)
{
if(!isn_pr[i])pr[++pr_cnt]=i;
rp(j,1,pr_cnt){if(i*pr[j]>N-10)break;isn_pr[i*pr[j]]=1;}
}
}
il int min(ri x,ri y){return x<y?x:y;}
il void cal(ri x,ri *y){rp(i,1,pr_cnt)while(!(x%pr[i]))++y[i],x/=pr[i];}
int main()
{
// freopen(".in","r",stdin);freopen(".out","w",stdout);
n=read();m=read();d=read();prepri();
rp(i,1,n)sum+=(a[i]=read());
rp(i,1,m){ri x=read(),y=read();if(!a[y])return printf("0/1"),0;cal(a[y],mul);cal(sum,divv);a[y]+=d;sum+=d;}
rp(i,1,pr_cnt){ri mn=min(divv[i],mul[i]);mul[i]-=mn,divv[i]-=mn;}
rp(i,1,pr_cnt)rp(j,1,mul[i])as1.multi(pr[i]);
rp(i,1,pr_cnt)rp(j,1,divv[i])as2.multi(pr[i]);
as1.output();printf("/");as2.output();
return 0;
}
洛谷P4204 [NOI2006]神奇口袋 数论的更多相关文章
- 洛谷 P2220 [HAOI2012]容易题 数论
洛谷 P2220 [HAOI2012]容易题 题目描述 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数 ...
- 洛谷 P4174 [NOI2006]最大获利 解题报告
P4174 [NOI2006]最大获利 题目描述 新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战.THU 集团旗下的 CS&T 通讯公司在新一代通讯技术血战的前夜,需要 ...
- 洛谷P4358密钥破解 [CQOI2016] 数论
正解:数论 解题报告: 先,放个传送门QwQ 这题难点可能在理解题意,,, 所以我先放个题意QAQ 大概就是说,给定一个整数N,可以被拆成两个质数的成绩p*q,然后给出了一个数e,求d满足e*d=1( ...
- 洛谷P2261 [CQOI2007] 余数求和 [数论分块]
题目传送门 余数求和 题目背景 数学题,无背景 题目描述 给出正整数n和k,计算G(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值,其中k mod ...
- 洛谷P3166 数三角形 [CQOI2014] 数论
正解:数论 解题报告: 传送门! 很久以前做的题了呢,,,回想方法还想了半天QAQ 然后写这题题解主要是因为看到了好像有很新颖的法子,就想着,学习一下趴,那学都学了不写博客多可惜 首先港下最常规的方法 ...
- 洛谷P2312 解方程 [noip2014] 数论
正解:数论 解题报告: 这儿是,传送门qwq 又是很妙的一道题呢,专门用来对付我这种思维僵化了的傻逼的QAQ 首先看题目的数据范围,发现a<=1010000,很大的一个数据范围了呢,那这题肯定不 ...
- 洛谷 P3190 [HNOI2007]神奇游乐园 解题报告
P3190 [HNOI2007]神奇游乐园 Description 给你一个 \(m * n\) 的矩阵,每个矩阵内有个权值\(V(i,j)\) (可能为负数),要求找一条回路,使得每个点最多经过一次 ...
- 洛谷P1403 [AHOI2005] 约数研究 [数论分块]
题目传送门 约数研究 题目描述 科学家们在Samuel星球上的探险得到了丰富的能源储备,这使得空间站中大型计算机“Samuel II”的长时间运算成为了可能.由于在去年一年的辛苦工作取得了不错的成绩, ...
- 洛谷 P4297 [NOI2006]网络收费
P4297 [NOI2006]网络收费 题目背景 noi2006 day1t1 题目描述 网络已经成为当今世界不可或缺的一部分.每天都有数以亿计的人使用网络进行学习.科研.娱乐等活动.然而,不可忽视的 ...
随机推荐
- 【原创】大叔经验分享(43)logstash设置jdbc_default_timezone后报错
logstash6.6.0-6.6.2版本使用jdbc input plugin时如果设置了jdbc_default_timezone,会报错: { 2012 rufus-scheduler inte ...
- C语言学习及应用笔记之四:C语言volatile关键字及其使用
在C语言中,还有一个并不经常使用但却非常有用的关键字volatile.那么使用volatile关键字究竟能干什么呢?接下来我将就此问题进行讨论. 一个使用volatile关键字定义变量,其实就是告诉编 ...
- Java中输入判定的错误和纠正
在编程过程中,很多技术人员看重程序的简洁性,效率性和包容性.其中最容易问到的就是假如输入数据不符合要求时的程序处理,这也是很多公司的机试题中应聘人员写出了符合功能要求的程序却并未通过面试的原因.下面是 ...
- uni-app调用原生的文件系统管理器(可选取附件上传)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 浏览器兼容html头部<meta>标签主要内容详情
<!DOCTYPE html> <head> <meta http-equiv="X-UA-Compatible" content="IE= ...
- jenkins命令行修改时间
前言:有时jenkins上的时间和系统时间不同步,但是jenkins又在运行状态,不可重启修改 方法:在jenkins界面上,输入命令 system.setProperty('org.apache.c ...
- SQL Server2012如何导出sql脚本并且还原数据库
一 备份数据库 1 选择某一个数据库,右键依次选择:任务==>生成脚本: 2 选择要编写脚本的数据库对象,注意此处可以选择特定的数据库对象,我们可以选择我们需要备份的数据表. 3 在当 ...
- javaAPI实现elasticsearch5.5.2的聚合分析
https://blog.csdn.net/plei_yue/article/details/78452633
- numpy的索引-【老鱼学numpy】
简单的索引值 import numpy as np a = np.arange(3, 15).reshape(3, 4) print("a=") print(a) print(&q ...
- python3 解析 base64 数据
在阅读 glTF-Tutorial 教程时遇到了解析 base64 数据的问题. 原始 base64 数据为AAABAAIAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAA ...