大水题,感觉比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. 请在mysql配置文件修sql-mode或sql_mode为NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

    错误信息:请在mysql配置文件修sql-mode或sql_mode为NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 解决办法(最有效,以MySQL5.7为例): ...

  2. java 静态数组 和非静态数组的区别

    区别:1,数组创建时间不同,静态的是一定义出来就创建了,动态的则是定义时不创建,使用时才创建,一定意义上节省了内存空间.2,使用场景不同,一开始就知道数组长度的使用静态初始化,反之,动态初始化. 静态 ...

  3. HandlerThread: HandlerThread的理解

    Android为了方便对Thread和Handler进行封装,也就是HandlerThread.HandlerThread继承自Thread,说白了就是Thread加上一个Looper.源码: 可以看 ...

  4. flutter drawer 自定义图标 icon 手动打开drawer

    方法1:GlobalKey import "package:flutter/material.dart"; class Test extends StatefulWidget { ...

  5. python获取风和天气城市数据 ID

    import requestsurl='https://cdn.heweather.com/china-city-list.csv'strhtml=requests.get(url)strhtml.e ...

  6. Spring cloud微服务安全实战-4-6搭建OAuth2资源服务器

    认证服务器已经搭建好了. 可以通过认证服务器拿到令牌 下面改造订单服务,让它可以用这个令牌. 争对订单服务要做三个事, 1.让订单服务知道它自己是Oauth协议里面的资源服务器.,它知道这个事后,它才 ...

  7. oracle数据库【表复制】insert into select from跟create table as select * from 两种表复制语句区别

    create table  as select * from和insert into select from两种表复制语句区别 create table targer_table as select ...

  8. 基于docker构建flink大数据处理平台

    https://www.cnblogs.com/1ssqq1lxr/p/10417005.html 由于公司业务需求,需要搭建一套实时处理数据平台,基于多方面调研选择了Flink. 初始化Swarm环 ...

  9. Python中利用原始套接字进行网络编程的示例

    Python中利用原始套接字进行网络编程的示例 在实验中需要自己构造单独的HTTP数据报文,而使用SOCK_STREAM进行发送数据包,需要进行完整的TCP交互. 因此想使用原始套接字进行编程,直接构 ...

  10. LwIP应用开发笔记之一:LwIP无操作系统基本移植

    现在,TCP/IP协议的应用无处不在.随着物联网的火爆,嵌入式领域使用TCP/IP协议进行通讯也越来越广泛.在我们的相关产品中,也都有应用,所以我们结合应用实际对相关应用作相应的总结. 1.技术准备 ...