题目链接:https://codeforces.com/contest/1154
这次比赛通过了三个题就不做了,结果评测后只剩下两题了(A,B),蒟蒻~
A. Restoring Three Numbers
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+10;
int main(){
vector<int> v(4);
for(int i=0;i<4;i++){
scanf("%d",&v[i]);
}
sort(v.begin(),v.end());
//v.back()传回最后一个数据,不检查这个数据是否存在
printf("%d %d %d\n",v.back()-v[0],v.back()-v[1],v.back()-v[2]);
return 0;
}
B. Make Them Equal
看到这题,一看数据量不大,只要简单模拟就能过。比赛结束后,看到大佬先排序,用unique筛除一样的。之后判断就可以。
代码1(我比赛时通过的代码):
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=110;
int a[maxn];
int main(){
int n;
scanf("%d",&n);
int mn=101,mx=-1;
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
mn=min(mn,a[i]);
mx=max(mx,a[i]);
}
if(mn==mx){
printf("0\n");
}else{
bool flag;
int res=101;
for(int i=mn;i<=mx;i++){
for(int j=1;j<=mx;j++){ //D
flag=true;
for(int k=0;k<n;k++){
if(a[k]==i) continue;
if(a[k]<i&&a[k]+j!=i){
flag=false;
break;
}else if(a[k]>i&&a[k]-j!=i){
flag=false;
break;
}
}
if(flag){
res=min(res,j);
}
}
}
if(res!=101) printf("%d\n",res);
else printf("-1\n");
}
return 0;
}
代码2(比赛后比较欣赏的思路):
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=110;
int main(){
int n;
scanf("%d",&n);
vector<int> v(n);
for(int i=0;i<n;i++){
scanf("%d",&v[i]);
}
sort(v.begin(),v.end());
n=unique(v.begin(),v.end())-v.begin();
if(n>3){
printf("-1\n");
}else{
if(n==1) printf("0\n");
else if(n==2) printf("%d\n",(v[1]-v[0])%2==0?(v[1]-v[0])/2:v[1]-v[0]);
else if(v[1]-v[0]==v[2]-v[1]) printf("%d\n",v[1]-v[0]);
else printf("-1\n");
}
return 0;
}
C. Gourmet Cat