洛谷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 题目描述 网络已经成为当今世界不可或缺的一部分.每天都有数以亿计的人使用网络进行学习.科研.娱乐等活动.然而,不可忽视的 ...
随机推荐
- 【python】md5加密方法相关使用
md5方法在hashlib库中,使用前需要先导入.它的主要方法为update,copy,以及转换为二进制,十六进制. 用法说明: Help on HASH object: class HASH(bui ...
- Python-web应用 +HTTP协议 +web框架
web架构 # web应用 架构# C/S 架构 | B/S 架构# client server: 客户端服务器架构,C++# browser server:浏览器服务器架构,Java.Python ...
- vue组件,通过props父组件给子组件传值,WTF, 子组件报错undefined???
如果是正常操作,找了半天又找不到为什么undefined, 那很可能是props的命名出了问题: 不要用小驼峰式命名 例如这种childrenData 这种形式就会报错undefined 请尽量用全 ...
- js 校验 btc eth 地址
NPM 安装 npm install wallet-address-validator Browser <script src="wallet-address-validator.mi ...
- 爬虫请求库之selenium模块
一 安装 #安装:selenium+chromedriver pip3 install selenium 下载chromdriver.exe放到python安装路径的scripts目录中即可,注意最新 ...
- appium自动化测试等待的三种方法
第一种 sleep(): 设置固定休眠时间.python 的 time 包提供了休眠方法 sleep() ,导入 time包后就可以使用 sleep()进行脚本的执行过程进行休眠. python # ...
- Nginx Linux详细安装部署教程
一.Nginx简介 Nginx是一个web服务器也可以用来做负载均衡及反向代理使用,目前使用最多的就是负载均衡,具体简介我就不介绍了百度一下有很多,下面直接进入安装步骤 二.Nginx安装 1.下载N ...
- Jmeter性能测试之进阶BeanShell的使用
BeanShell 最常用的用法 写好Java代码打成jar, 放到目录\lib\ext下面 package com.test; import java.io.File; import java.io ...
- 剑指offer数组2
面试题39:数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次, ...
- Redis 可视化工具:Web Redis Manager
以前用的:RedisDesktopManager (0.9.3以后需要订阅) https://github.com/uglide/RedisDesktopManager/releases 现在需要订阅 ...