牛客小白月赛23
题外话
中文题, 就不说题意了,大家都能看明白
B
B思路
其实我们只要考虑一件事,这道题就解决了, 因为要让n的阶层是p的倍数, 所以n的阶层里一定存在p所有的因数,然后在考虑极端一点, p的一些因数都是可以用质因数表示, 所以其实只要把p的所有质因数求出来就行了
最后在二分查找最小拥有所有p的质因数的n就行了
B代码
///*
//正在播放《フリージア》
//1:21 ━━━━━━●───── 5:35
// ? ? ?? ? ?
//```````'`...```````''`````````````'````````````````'`.`''
//```````''..`';;'```''```'''''''''''''`````````````````'':
//.````''''':;;!!:````'````'''''''''''``````````````````'':
//``''''''':;;;;;'```'``````''```````````____________```'':
//`````````:;;!;'```````````'```````'```| 所以说 |'``'':
//```````'|$&$%:````````````'```````````|不要停下来啊|''''':
//````'''!$&&&|'```````````'''::''::''''/ (指AC) |':'':::
//````'':|&&&$!'`````'''''''::.....`;!;'/_________|''``'::
// ....'|&&@$!'........```:!;'....`:;:```````````````````'
//..````;$&&&$!:''``````'':|%%!::;|%$$!::::::::''::::::::::
//``````!&&@&&|:'````````':|$$$$$$$$$|:':::::::::::::::::::
//`````:%&@@@@@@@@&&&@@@@&&&&@@@@@@@&&&|::::::::':::::::::;
//`````.```':|$@@@@@@@@@@@@@@@@@@@@@@@@###@@&&$|;:::'::::::
//````````````';|$&@@@@@@@@@###@@@@@@########@@@@$!''''::::
//`````````..````:|%$@@@@@#########@#########@@@@&!''''::::
//`````````````````:|&########################@@@$;::::::::
//``````````````````:!$@########################@%;:::'::::
//``````````..``````':|&#######################@@&!''''''::
//''''::'''`.`''''''':|@#######################@@&|:'`.`';!
//:::::::::``'''''';%@######################@@##@@&!::'';;;
//::;::::::`.''''';%@@@@####################$%@##@@%;:'':;!
//:;;;;::::``':;%@@@#########################&%&##@@|:'';;!
//;;!;;;;;;'`::;%@#############################@@##@$!'';!!
//;;;;;;;;:``':::::;|$@############################@$!'`;!!
//::;;;;;;:'`'::::::;!$@#######################&&@$$$;``:;;
//`````````..````````'|@#####################$;!$$$&@@|''':
//'''''''''''''':'''''|@#########@&@##########@@####@@&%|!!
//''''''''':'''::'':''!&########&!|&@##########&&####&%|!||
//:::::'''::::::::::::!&########|:;|$@#########@&###&%||||!
//:::::::'''''':::::::!&#######@!:;!!$@########@$&##@%||||!
//
// だからよ...止まるじゃねえぞ
// */
#include <vector>
#include <algorithm>
#include <string>
#include<cstring>
#include <iostream>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <unordered_map>
#include <bitset>
#include <cassert>
#include <chrono>
#include <random>
#include <iomanip>
#include <unordered_set>
#include <ctime>
#include <chrono>
using namespace std;
// #define ll long long
const int N =1e6+10;
#define PII pair<int , int >
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define pb push_back
#define sz(x) (int)(x).size()
typedef long long ll;
typedef long double ld;
mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
int n , m ,t ;
#define __i __int128
int zhi[100010], yin[100010];
bool check(int x , int k){
int t = x;
for(int i=0 ;i<k;i++){
t =x ;int num =0 ;
while(t )num+=t/zhi[i], t/=zhi[i];
if(num<yin[i])return false ;
}
return true ;
}
int arr[100010];
int main(){
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >>n;
while(n--){
int t,r;cin >>t; r = t;
int cnt =0 ;
memset(zhi,0,sizeof zhi);
memset(yin,0,sizeof yin);
for(int i=2 ;i<=t/i;i++){
if(t%i==0){
while(t%i==0){
t/=i;
zhi[cnt] = i;
yin[cnt]++;
}
cnt ++ ;
}
}
if(t!=1)zhi[cnt]= t, yin[cnt] =1 ,cnt ++ ;
int l=1 ;
while(l<r ){
int mid = r+l >>1 ;
if(check(mid, cnt))r =mid;
else l =mid +1 ;
}
cout<<r<<endl;
}
return 0;
}
C
C思路
首先,要明白什么是连通分量(上学期刚做完的笔记啊,混蛋,怎么现在就忘了),建议百度,然后会发现,每次多一个连通分量的前提是,多出现一个孤立的点,所以画图你会得出结论, 每次多出来一个连通分量,意味着多n- i(n代表一共所有的点, i代表当前总共的连通分量),这个题唯一的坑点就是数据有点太大了\(10^18\),直接用得出来的结论会爆掉, 此时有两种方法
- 使用__int128
- 转换一下结论, (我使用的是第二种方案),其实就是除一下就好了具体转换的结果在代码里, 就不多说了
C代码
//第一种二分的方法
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define iinf 0x3f3f3f3f
#define linf (1ll<<60)
#define eps 1e-8
#define maxn 1000010
#define maxe 1000010
#define cl(x) memset(x,0,sizeof(x))
#define rep(i,a,b) for(i=a;i<=b;i++)
#define drep(i,a,b) for(i=a;i>=b;i--)
#define em(x) emplace(x)
#define emb(x) emplace_back(x)
#define emf(x) emplace_front(x)
#define fi first
#define se second
#define de(x) cerr<<#x<<" = "<<x<<endl
#define __i __int128
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
ll read(ll x=0)
{
ll c, f(1);
for(c=getchar();!isdigit(c);c=getchar())if(c=='-')f=-f;
for(;isdigit(c);c=getchar())x=x*10+c-0x30;
return f*x;
}
ll n , k ;
int ar[1000010];
int br[100010];
ll res =0 ;
int main()
{
ll t ;t= read() ;
while(t--){
n =read() , k =read();
ll l =1 , r =n;
while(l<r){
ll mid =(l+r)>>1;
if(2*n-mid -1 >2*k/mid)r =mid ;
else l =mid +1 ;
}
cout<<l<<endl;
}
return 0;
}
//第二种二分的方法
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
int t;cin>>t;
while(t--){
ll n,m;cin>>n>>m;
ll l=0,r=n-1;
while(l<r){
ll mid=(l+r+1)>>1;//+1是为了防止l=r-1时的不断循环
if(2*n-mid-1<=2*m/mid) l=mid;
else r=mid-1;
}
cout<<l+1<<"\n";
}
return 0;
}
E
E思路
我个人觉得挺坑的, 我一开始想暴力做来着,,具体也没啥,要是想证明的话,就是因为,每一个数都能找出对应的点,与之得出答案(反正我不是搞数论的,随便口胡一下。。)
E代码
n =input()
print("4294967296")
G
G思路
一开始想麻烦了 , 这个题,如果画图的话,就很清晰了(说明里面的就是坑人玩的)
就是求每条边被用了多少次,实际上就是这条边的两端节点个数的乘积,所以在dfs求出sz之后,每条边的使用次数就是 sz*(n-sz),排个序即可。——————引自官方题解
G代码
///*
//正在播放《フリージア》
//1:21 ━━━━━━●───── 5:35
// ? ? ?? ? ?
//```````'`...```````''`````````````'````````````````'`.`''
//```````''..`';;'```''```'''''''''''''`````````````````'':
//.````''''':;;!!:````'````'''''''''''``````````````````'':
//``''''''':;;;;;'```'``````''```````````____________```'':
//`````````:;;!;'```````````'```````'```| 所以说 |'``'':
//```````'|$&$%:````````````'```````````|不要停下来啊|''''':
//````'''!$&&&|'```````````'''::''::''''/ (指AC) |':'':::
//````'':|&&&$!'`````'''''''::.....`;!;'/_________|''``'::
// ....'|&&@$!'........```:!;'....`:;:```````````````````'
//..````;$&&&$!:''``````'':|%%!::;|%$$!::::::::''::::::::::
//``````!&&@&&|:'````````':|$$$$$$$$$|:':::::::::::::::::::
//`````:%&@@@@@@@@&&&@@@@&&&&@@@@@@@&&&|::::::::':::::::::;
//`````.```':|$@@@@@@@@@@@@@@@@@@@@@@@@###@@&&$|;:::'::::::
//````````````';|$&@@@@@@@@@###@@@@@@########@@@@$!''''::::
//`````````..````:|%$@@@@@#########@#########@@@@&!''''::::
//`````````````````:|&########################@@@$;::::::::
//``````````````````:!$@########################@%;:::'::::
//``````````..``````':|&#######################@@&!''''''::
//''''::'''`.`''''''':|@#######################@@&|:'`.`';!
//:::::::::``'''''';%@######################@@##@@&!::'';;;
//::;::::::`.''''';%@@@@####################$%@##@@%;:'':;!
//:;;;;::::``':;%@@@#########################&%&##@@|:'';;!
//;;!;;;;;;'`::;%@#############################@@##@$!'';!!
//;;;;;;;;:``':::::;|$@############################@$!'`;!!
//::;;;;;;:'`'::::::;!$@#######################&&@$$$;``:;;
//`````````..````````'|@#####################$;!$$$&@@|''':
//'''''''''''''':'''''|@#########@&@##########@@####@@&%|!!
//''''''''':'''::'':''!&########&!|&@##########&&####&%|!||
//:::::'''::::::::::::!&########|:;|$@#########@&###&%||||!
//:::::::'''''':::::::!&#######@!:;!!$@########@$&##@%||||!
//
// だからよ...止まるじゃねえぞ
// */
#include <vector>
#include <algorithm>
#include <string>
#include<cstring>
#include <iostream>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <unordered_map>
#include <bitset>
#include <cassert>
#include <chrono>
#include <random>
#include <iomanip>
#include <unordered_set>
#include <ctime>
#include <chrono>
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define iinf 0x3f3f3f3f
#define linf (1ll<<60)
#define eps 1e-8
#define maxn 1000010
#define maxe 1000010
#define cl(x) memset(x,0,sizeof(x))
#define rep(i,a,b) for(i=a;i<=b;i++)
#define drep(i,a,b) for(i=a;i>=b;i--)
#define em(x) emplace(x)
#define emb(x) emplace_back(x)
#define emf(x) emplace_front(x)
#define fi first
#define se second
#define de(x) cerr<<#x<<" = "<<x<<endl
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
using namespace std;
// #define ll long long
const int N =1e6+10;
#define PII pair<int , int >
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define pb push_back
#define sz(x) (int)(x).size()
typedef long long ll;
typedef long double ld;
mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
ll n , m ,t ;
#define __i __int128
//ll mod = 1e9+7;
int e[N] , ne[N] , h[N],idx ;
int ar[N];
void add(int a ,int b){
e[idx] = b, ne[idx]=h[a] , h[a]= idx++;
}
map<int ,int > mp;
void dfs(int x ,int fa){
mp[x]=1 ;
for(int i=h[x];i!=-1 ;i=ne[i]){
int j =e[i];
if(j !=fa){
dfs(j,x);
mp[x] +=mp[j];
// cout<<mp[x]<<endl;
}
}
// ar[x-1]= (ll)mp[x]*(n-mp[x]);
}
vector<ll> lis;
ll f[100010];
int main(){
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >>n;
memset(h, -1 ,sizeof h);
for(int i=0;i<n-1 ;i++){
int a, b ;cin >>a>>b;
add(a,b) ;add(b,a);
}
dfs(1, 0);
int i;
rep(i,1,n)lis.emb(mp[i]*(n-mp[i]));
sort(lis.begin(),lis.end());
ll ans=0;
rep(i,1,n-1)ans+=(n-i)*lis[i];
cout<<ans<<endl;
return 0;
}
H
H思路
其实一读完题,就应该明白一件事,就是
- 如果能总的加起来能超过\(2^30\),那么一定存在一种方式,
- 反之, impossible
剩下的事情就是从大到小拍个序存一下就行了
(明白了vector排序很慢这一事实, pair的都比他快TAT)
H代码
///*
//正在播放《フリージア》
//1:21 ━━━━━━●───── 5:35
// ? ? ?? ? ?
//```````'`...```````''`````````````'````````````````'`.`''
//```````''..`';;'```''```'''''''''''''`````````````````'':
//.````''''':;;!!:````'````'''''''''''``````````````````'':
//``''''''':;;;;;'```'``````''```````````____________```'':
//`````````:;;!;'```````````'```````'```| 所以说 |'``'':
//```````'|$&$%:````````````'```````````|不要停下来啊|''''':
//````'''!$&&&|'```````````'''::''::''''/ (指AC) |':'':::
//````'':|&&&$!'`````'''''''::.....`;!;'/_________|''``'::
// ....'|&&@$!'........```:!;'....`:;:```````````````````'
//..````;$&&&$!:''``````'':|%%!::;|%$$!::::::::''::::::::::
//``````!&&@&&|:'````````':|$$$$$$$$$|:':::::::::::::::::::
//`````:%&@@@@@@@@&&&@@@@&&&&@@@@@@@&&&|::::::::':::::::::;
//`````.```':|$@@@@@@@@@@@@@@@@@@@@@@@@###@@&&$|;:::'::::::
//````````````';|$&@@@@@@@@@###@@@@@@########@@@@$!''''::::
//`````````..````:|%$@@@@@#########@#########@@@@&!''''::::
//`````````````````:|&########################@@@$;::::::::
//``````````````````:!$@########################@%;:::'::::
//``````````..``````':|&#######################@@&!''''''::
//''''::'''`.`''''''':|@#######################@@&|:'`.`';!
//:::::::::``'''''';%@######################@@##@@&!::'';;;
//::;::::::`.''''';%@@@@####################$%@##@@%;:'':;!
//:;;;;::::``':;%@@@#########################&%&##@@|:'';;!
//;;!;;;;;;'`::;%@#############################@@##@$!'';!!
//;;;;;;;;:``':::::;|$@############################@$!'`;!!
//::;;;;;;:'`'::::::;!$@#######################&&@$$$;``:;;
//`````````..````````'|@#####################$;!$$$&@@|''':
//'''''''''''''':'''''|@#########@&@##########@@####@@&%|!!
//''''''''':'''::'':''!&########&!|&@##########&&####&%|!||
//:::::'''::::::::::::!&########|:;|$@#########@&###&%||||!
//:::::::'''''':::::::!&#######@!:;!!$@########@$&##@%||||!
//
// だからよ...止まるじゃねえぞ
// */
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
#include <vector>
#include <algorithm>
#include <string>
#include<cstring>
#include <iostream>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <unordered_map>
#include <bitset>
#include <cassert>
#include <chrono>
#include <random>
#include <iomanip>
#include <unordered_set>
#include <ctime>
#include <chrono>
using namespace std;
// #define ll long long
const int N =1e6+10;
#define PII pair<int , int >
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define pb push_back
#define sz(x) (int)(x).size()
typedef long long ll;
typedef long double ld;
mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
ll n , m ,t ;
#define __i __int128
//ll mod = 1e9+7;
ll br[N]={0};
ll f[100010];
vector<pair<ll ,ll > > v;
int main(){
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >>t;
while(t--){
cin >>n; ll sum =0 ;
for(int i=1 ;i<=n;i++){
cin>>m;
v.push_back({(1<<m) , i});
sum +=(1<<m);
}
if(sum < (1<<30)){
cout<<"impossible"<<endl;
continue ;
}
sort(v.begin(),v.end());
for(int i=1 ;i<=n;i++)br[i]=0 ;
sum = (1<<30) ;
for(int i=v.size()-1 ;i>=0;i--)
if(sum>=v[i].first){
sum-=v[i].first;
br[v[i].second] = 1;
}
for(int i=1 ;i<=n;i++)cout<<br[i];cout<<endl;
}
return 0;
}
I
I思路
主要注意一件事情就行了,是连续的最大字典序子串,这样babb,是会输出bb的(学了一手新的max的用法)
I代码
///*
//正在播放《フリージア》
//1:21 ━━━━━━●───── 5:35
// ? ? ?? ? ?
//```````'`...```````''`````````````'````````````````'`.`''
//```````''..`';;'```''```'''''''''''''`````````````````'':
//.````''''':;;!!:````'````'''''''''''``````````````````'':
//``''''''':;;;;;'```'``````''```````````____________```'':
//`````````:;;!;'```````````'```````'```| 所以说 |'``'':
//```````'|$&$%:````````````'```````````|不要停下来啊|''''':
//````'''!$&&&|'```````````'''::''::''''/ (指AC) |':'':::
//````'':|&&&$!'`````'''''''::.....`;!;'/_________|''``'::
// ....'|&&@$!'........```:!;'....`:;:```````````````````'
//..````;$&&&$!:''``````'':|%%!::;|%$$!::::::::''::::::::::
//``````!&&@&&|:'````````':|$$$$$$$$$|:':::::::::::::::::::
//`````:%&@@@@@@@@&&&@@@@&&&&@@@@@@@&&&|::::::::':::::::::;
//`````.```':|$@@@@@@@@@@@@@@@@@@@@@@@@###@@&&$|;:::'::::::
//````````````';|$&@@@@@@@@@###@@@@@@########@@@@$!''''::::
//`````````..````:|%$@@@@@#########@#########@@@@&!''''::::
//`````````````````:|&########################@@@$;::::::::
//``````````````````:!$@########################@%;:::'::::
//``````````..``````':|&#######################@@&!''''''::
//''''::'''`.`''''''':|@#######################@@&|:'`.`';!
//:::::::::``'''''';%@######################@@##@@&!::'';;;
//::;::::::`.''''';%@@@@####################$%@##@@%;:'':;!
//:;;;;::::``':;%@@@#########################&%&##@@|:'';;!
//;;!;;;;;;'`::;%@#############################@@##@$!'';!!
//;;;;;;;;:``':::::;|$@############################@$!'`;!!
//::;;;;;;:'`'::::::;!$@#######################&&@$$$;``:;;
//`````````..````````'|@#####################$;!$$$&@@|''':
//'''''''''''''':'''''|@#########@&@##########@@####@@&%|!!
//''''''''':'''::'':''!&########&!|&@##########&&####&%|!||
//:::::'''::::::::::::!&########|:;|$@#########@&###&%||||!
//:::::::'''''':::::::!&#######@!:;!!$@########@$&##@%||||!
//
// だからよ...止まるじゃねえぞ
// */
#include <vector>
#include <algorithm>
#include <string>
#include<cstring>
#include <iostream>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <unordered_map>
#include <bitset>
#include <cassert>
#include <chrono>
#include <random>
#include <iomanip>
#include <unordered_set>
#include <ctime>
#include <chrono>
using namespace std;
// #define ll long long
const int N =1e6+10;
#define PII pair<int , int >
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define pb push_back
#define sz(x) (int)(x).size()
typedef long long ll;
typedef long double ld;
mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
int n , m ,t ;
#define __i __int128
//ll mod = 1e9+7;
string manacher(string s){
if(s.size()<2)return s;
string t ;t+='$';
for(int i=0;i<s.size();i++)
t +='#'+s[i];
t+='@';
int num = t.size();
int p[num];
int id =0 , mx= 0;
int maxl = -1;
int index =0;
for(int j=1 ;j<num-1;j++){
p[j] = mx>j?min(p[2*id-j],mx - j):1;
while(t[j+p[j]]==t[j-p[j]])p[j]++;
if(mx<p[j]+j){
mx = p[j]+j;
id = j;
}
if(maxl < p[j]+ 1){
maxl = p[j]-1 ;
index = j;
}
}
int start = (index - maxl)/2;
//cout <<start<<endl;
return s.substr(start ,start+maxl);
}
int arr[100010];
int main(){
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
string s;cin>>s;
string ss;
int len =s.size();
for(int i=0;i<len;i++){
string sss;
for(int j=i;j<len;j++)sss+=s[j] ;
ss = max(ss, sss);
}
cout<<ss<<endl;
return 0;
}
J
J思路
签到题,(群里有大佬说什么退火,给我搞的一愣一愣的..)
J代码
///*
//正在播放《フリージア》
//1:21 ━━━━━━●───── 5:35
// ? ? ?? ? ?
//```````'`...```````''`````````````'````````````````'`.`''
//```````''..`';;'```''```'''''''''''''`````````````````'':
//.````''''':;;!!:````'````'''''''''''``````````````````'':
//``''''''':;;;;;'```'``````''```````````____________```'':
//`````````:;;!;'```````````'```````'```| 所以说 |'``'':
//```````'|$&$%:````````````'```````````|不要停下来啊|''''':
//````'''!$&&&|'```````````'''::''::''''/ (指AC) |':'':::
//````'':|&&&$!'`````'''''''::.....`;!;'/_________|''``'::
// ....'|&&@$!'........```:!;'....`:;:```````````````````'
//..````;$&&&$!:''``````'':|%%!::;|%$$!::::::::''::::::::::
//``````!&&@&&|:'````````':|$$$$$$$$$|:':::::::::::::::::::
//`````:%&@@@@@@@@&&&@@@@&&&&@@@@@@@&&&|::::::::':::::::::;
//`````.```':|$@@@@@@@@@@@@@@@@@@@@@@@@###@@&&$|;:::'::::::
//````````````';|$&@@@@@@@@@###@@@@@@########@@@@$!''''::::
//`````````..````:|%$@@@@@#########@#########@@@@&!''''::::
//`````````````````:|&########################@@@$;::::::::
//``````````````````:!$@########################@%;:::'::::
//``````````..``````':|&#######################@@&!''''''::
//''''::'''`.`''''''':|@#######################@@&|:'`.`';!
//:::::::::``'''''';%@######################@@##@@&!::'';;;
//::;::::::`.''''';%@@@@####################$%@##@@%;:'':;!
//:;;;;::::``':;%@@@#########################&%&##@@|:'';;!
//;;!;;;;;;'`::;%@#############################@@##@$!'';!!
//;;;;;;;;:``':::::;|$@############################@$!'`;!!
//::;;;;;;:'`'::::::;!$@#######################&&@$$$;``:;;
//`````````..````````'|@#####################$;!$$$&@@|''':
//'''''''''''''':'''''|@#########@&@##########@@####@@&%|!!
//''''''''':'''::'':''!&########&!|&@##########&&####&%|!||
//:::::'''::::::::::::!&########|:;|$@#########@&###&%||||!
//:::::::'''''':::::::!&#######@!:;!!$@########@$&##@%||||!
//
// だからよ...止まるじゃねえぞ
// */
#include <vector>
#include <algorithm>
#include <string>
#include<cstring>
#include <iostream>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <unordered_map>
#include <bitset>
#include <cassert>
#include <chrono>
#include <random>
#include <iomanip>
#include <unordered_set>
#include <ctime>
#include <chrono>
using namespace std;
// #define ll long long
const int N =1e6+10;
#define PII pair<int , int >
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define pb push_back
#define sz(x) (int)(x).size()
typedef long long ll;
typedef long double ld;
mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
int n , m ,t ;
#define __i __int128
//ll mod = 1e9+7;
string manacher(string s){
if(s.size()<2)return s;
string t ;t+='$';
for(int i=0;i<s.size();i++)
t +='#'+s[i];
t+='@';
int num = t.size();
int p[num];
int id =0 , mx= 0;
int maxl = -1;
int index =0;
for(int j=1 ;j<num-1;j++){
p[j] = mx>j?min(p[2*id-j],mx - j):1;
while(t[j+p[j]]==t[j-p[j]])p[j]++;
if(mx<p[j]+j){
mx = p[j]+j;
id = j;
}
if(maxl < p[j]+ 1){
maxl = p[j]-1 ;
index = j;
}
}
int start = (index - maxl)/2;
//cout <<start<<endl;
return s.substr(start ,start+maxl);
}
int arr[100010];
int main(){
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >>n;
for(int i=0;i<n;i++)cin >>arr[i];
sort(arr,arr+n);
cout<<arr[n-1]-arr[0]<<endl;
return 0;
}