洛谷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 题目描述 网络已经成为当今世界不可或缺的一部分.每天都有数以亿计的人使用网络进行学习.科研.娱乐等活动.然而,不可忽视的 ...
随机推荐
- 【原创】大叔经验分享(27)linux服务器升级glibc故障恢复
redhat6系统默认安装的glibc-2.12,有的软件依赖的是glibc-2.14,这时需要升级glibc,下载安装 http://ftp.gnu.org/gnu/glibc/glibc-2.14 ...
- [正则表达式]PCRE反向分组引用(语法)
正则表达式中,凡出现圆括号(),括号中的匹配内容就会被认为是一个分组: 根据括号从左边出现的顺序命名分组代号,分组代号由1到n(代号0通常被一些语言用来引用整个表达式匹配的结果,即使这个表达式没有分组 ...
- Visual Studio 2015中 没有“安装和部署”的解决方法
使用Visual Studio 2015 Community新建项目,在已安装模板中的“其它项目类型”下未找到“安装和部署”选项.在微软官网下载 Microsoft Visual Studio 201 ...
- wifi的主动扫描和被动扫描
要实现wifi上的探针模块,简单了了解了802.11中的各种帧,对一些帧的发送频率和方式也有简单了解.不过了解的都不够细致.只是简单知道手机打开wifi后回不停的向外发送probe request这个 ...
- MySQL基础使用
数据库 其实我们常常说的数据库,应该叫数据库系统. 表和库 数据表:用来保存数据的表格 数据库:用来统一管理数据表的容器 启动mysql 关闭mysql service mysqld start(启动 ...
- Windows caffe 跑mnist实例
一. 装完caffe当然要来跑跑自带的demo,在examples文件夹下. 先来试试用于手写数字识别的mnist,在 examples/mnist/ 下有需要的代码文件,但是没有图像库. mn ...
- 在node中使用MongoDB
1.下载安装包,进行安装: https://www.mongodb.com/download-center/community 参考网址:https://www.cnblogs.com/ymwange ...
- day17递归函数(二分法查找)
递归函数: 如果函数包含了对其自身的调用,该函数就是递归的: example 1:二分法查找的实现: def find_recursion(l,aim,start=0,end=None): #end不 ...
- Django web框架
urls的配置 views视图函数 tempalte模板 settings的配置 Django目录结构分析 Django主线 Django-model基础 Django-model聚合查询与分组查询 ...
- C语言fread/fwrite填坑记
坑的描述 用fwrite把数据写入文件,再用fread读取,发现后半部分的数据可能是错的. 原因:原本要写入文件的数据中,有0x0A,如果用的是文本模式打开的文件流,在windows下0x0A会被转换 ...