洛谷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 题目描述 网络已经成为当今世界不可或缺的一部分.每天都有数以亿计的人使用网络进行学习.科研.娱乐等活动.然而,不可忽视的 ...
随机推荐
- 手把手教你写vue插件并发布(一)
vue的插件开发 这篇文章较长,需要一定的阅读时间.这里有一份改善版本的插件笔记,在一个项目下完成开发.测试.发布的全过程.https://www.cnblogs.com/adouwt/p/96555 ...
- 【原创】大数据基础之Spark(1)Spark Submit即Spark任务提交过程
Spark2.1.1 一 Spark Submit本地解析 1.1 现象 提交命令: spark-submit --master local[10] --driver-memory 30g --cla ...
- java第一个demo(简单登陆窗体)
首先新建一个Maven项目 选择一个存放项目的目录 ,点击完成(下图). 为了防止jdk版本的问题,所以在pom.xml里面做一个配置,让整个项目统一用jdk 1.8版本(1.7之前可能会存在一些问题 ...
- Vue实战笔记
1.组件的属性 例子: <template> <div class="hello"> <test-props name="demo" ...
- for/while循环运用(do while)
//for循环用于知道次数的循环,while用于不知道的次数的循环//第1种写法 while循环 import java.util.Scanner;//插入util工具包 public class H ...
- Bag of Tricks for Image Classification with Convolutional Neural Networks论文笔记
一.高效的训练 1.Large-batch training 使用大的batch size可能会减小训练过程(收敛的慢?我之前训练的时候挺喜欢用较大的batch size),即在相同的迭代次数 ...
- NOIP2017普及组初赛试题及答案
普及组C++语言试题 一.单项选择题(共 20 题,每题 1.5 分,共计 30 分:每题有且仅有一个正确选项) 1.在 8 位二进制补码中,10101011 表示的数是十进制下的( ). A. 43 ...
- 一篇图看清Java中的各种Queue
说到数据结构,我们大概可以列出这么几个:数组,链表,栈,队列,集合,哈希表. 其中 队列 作为一个常用的数据结构,在Java中也有各种形式的实现. 顶级接口为java.util.queue. java ...
- 2018-2019-1 20189201 《LInux内核原理与分析》第七周作业
我的愿望是 好好学习Linux 一.书本第六章知识总结[进程的描述和进程的创建] 基础知识1 操作系统内核实现操作系统的三大管理功能,即进程管理功能,内存管理和文件系统.对应的三个抽象的概念是进程,虚 ...
- centos升级python2.7到3.6之后造成yum命令报错
今天学习浏览器模拟,把云端centos上的python2.7升级到3.6,但是安装其他软件时发现报如下错误: File "/usr/bin/yum", line 30 except ...