大水题,感觉比C题水多了。。。(证明倒是挺难)

题目大意:额,这个(实在总结不出)

还是题目描述吧:仓库里有$n$种相同数量($x$把)的剑(但你不知道有多少),一天有$y$人闯进了仓库,每人拿了$z$把相同的剑(每个人拿的种类不一定相同),现在给你每把剑所剩下的数量$a_i$,求最小的$y$,并求出$z$

令$a_{max}=max(a[i]|1≤i≤n)$

令$b[i]=a_{max}-a[i](1≤i≤n)$

令$b_{gcd}=gcd(b[i]|b[i]!=0,1≤i≤n)$

令$c[i]=\frac{b[i]}{b_{gcd}}(1≤i≤n)$

emm...(通过看样例)易得,$z_{max}=b_{gcd}$,$y=\sum\limits_{i=1}^{n}{c_i}$


证明:

反证法。设存在比$b_{gcd}$更大的$z$值,令$Max$等于这个$z$值

①$x=a_{max}$

  此时$Max$应能整除所有非0的$b[i]$且比$b_{gcd}$大,不符合$gcd$的定义(最大公约数),矛盾

②$x>a_{max}$

  此时$Max$应能整除所有非0的$b[i]+x-a_{max}$,此时若$x-a_{max}≤b_{gcd}$,那么$Max$肯定小于等于$b_{gcd}$,矛盾

  故仅需考虑$x-a_{max}>b_{gcd}$这种情况。此时$Max=gcd(b[i]+x-a_{max}|1≤i≤n)$

  根据$gcd$的定义,可以证明:若多个数都加上一个值后$gcd$更大,只能是加上了它们的公约数的倍数。(这里不再赘述,读者自证不难)

  根据我们此题得到:$b[i](1≤i≤n)$中至少有一个为$0$,故$gcd(b[i](1≤i≤n))=0$

  故$gcd(b[i]+d(1≤i≤n,d∈N^+))≤b_{gcd}$

  故得,$Max≤b_{gcd}$,矛盾

故$z_{max}=b_{gcd}$,证毕


注意特判$b_{gcd}$为$0$的情况,还有,提示一下:要开$long$ $long$!

代码如下:

#include<cstdio>
#define ll long long inline ll read(){
ll r=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9')r=(r<<1)+(r<<3)+c-'0',c=getchar();
return r*f;
} ll n,a[200002],Max,Min=1e9+10,y,z; ll gcd(ll a,ll b){
return b?gcd(b,a%b):a;
} inline ll max(ll a,ll b){
return a>b?a:b;
} inline ll min(ll a,ll b){
return a<b?a:b;
} int main(){
n=(int)read();
for(int i=1;i<=n;i++){
a[i]=read();
Max=max(Max,a[i]);
Min=min(Min,a[i]);
}
z=Max-Min;
for(int i=1;i<=n;i++){
if(Max==a[i])continue;
z=gcd(z,Max-a[i]);
}
if(!z){
printf("0 0");
return 0;
}
for(int i=1;i<=n;i++)y+=(Max-a[i])/z;
printf("%lld %lld",y,z);
return 0;
}

题解 CF1216D 【Swords】的更多相关文章

  1. UVALive 6911 Double Swords 树状数组

    Double Swords 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8 ...

  2. Educational Codeforces Round 89 (Rated for Div. 2) A Shovels and Swords B、Shuffle

    题目链接:A.Shovels and Swords 题意: 你需要一个木棍和两个钻石可以造出来一把剑 你需要两个木棍和一个钻石可以造出来一把铁锹 你现在有a个木棍,b个钻石,问你最多可以造出来几件东西 ...

  3. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  4. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  5. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  6. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  7. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  8. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  9. UVALive 6911---Double Swords(贪心+树状数组(或集合))

    题目链接 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...

随机推荐

  1. 数据库blob图片文件,多图片打包下载

    数据库存储blob图片文件,前端打包下载 数据库图片文件实体类 package com.cmrh.mspserver.pos.dto; import java.io.Serializable; imp ...

  2. 【opencv C++ linux】linux下编译含opencv的C++代码

    首先写一个简单的测试代码 #include <opencv2/opencv.hpp> #include <iostream> #include <string> u ...

  3. 使用Xpose突破安卓App禁止截屏限制

    WindowManager.LayoutParams.FLAG_SECURE标志的app,这里需要注意下支付宝.网上银行类的app不建议拦截,像支付宝里的付款码,商家拿到后,直接就能扣费,不需要用户这 ...

  4. apache不能解析php之解决办法

    记录一下Ubuntu16.04下的apache服务器不能解析php的问题,如图所示: 对于这个Ubuntu16.04最直接最快速的解决办法就是执行如下命令: sudo apt-get install ...

  5. Git的使用(3) —— 远程版本库的操作(GitHub)

    1. 配置SSH (1) GitHub 登陆GitHub后,点击右上角头像,选择 Setting . 在左面栏目中选择"SSH and GPG keys". 打开生成的SSH公钥文 ...

  6. ubuntu之路——day11.4 定位数据不匹配与人工合成数据

    1.人工检验train和dev/test之间的区别: 比如:汽车语音识别中的噪音.地名难以识别等等 2.使得你的训练集更靠近(相似于)dev/test,收集更多类似于dev的数据: 比如:dev中存在 ...

  7. #C++初学记录(N皇后#回溯递归)

    <font size=5 face"微软雅黑">N皇后Problem Description <font size=4 face"微软雅黑"& ...

  8. [面试]快来测测你的C++水平

    在32位编译环境下进行测试. 以下代码运行结果是什么? #include <iostream> using namespace std; class D { public: static ...

  9. C++ atof 函数

    腾讯云:https://cloud.tencent.com/developer/article/1391966 atof函数: 功能:将字串转换成浮点型数 相关函数 atoi,atol,strtod, ...

  10. 空指针异常 自动拆箱 防止 NPE,是程序员的基本修养 本手册明确防止 NPE 是调用者的责任。

    空指针异常 空指针异常是指java中的异常类.   中文名 空指针异常 外文名 NullPointerException 当应用程序试图在需要对象的地方使用 null 时,抛出该异常.这种情况包括: ...