A. Elections
题目描述
输入描述
输出描述
输入样例
5
0 0 0
10 75 15
13 13 17
1000 0 0
0 1000000000 0
输出样例
1 1 1
66 0 61
5 5 0
0 1001 1001
1000000001 0 1000000001
有手就行签到题,特判同分情况即可。
参考代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
int t;
cin>>t;
while(t--){
ll a,b,c;
cin>>a>>b>>c;
ll maxx;
maxx=max(a,b);
maxx=max(maxx,c);
if(a==maxx&&b!=maxx&&c!=maxx)
cout<<"0"<<" ";
else
cout<<maxx+1-a<<" ";
if(b==maxx&&a!=maxx&&c!=maxx)
cout<<"0"<<" ";
else
cout<<maxx+1-b<<" ";
if(c==maxx&&a!=maxx&&b!=maxx)
cout<<"0"<<" ";
else
cout<<maxx+1-c<<" ";
cout<<endl;
}
return 0;
}
B. Make it Divisible by 25
题目描述
输入描述
输出描述
输入样例
5
100
71345
3259
50555
2050047
输出样例
0
3
1
3
2
样例描述
显然对于 25 的倍数,尾数一定是 00、25、50、75 ,因此只需从低位向高位暴力判断,最少需要删几位才能构成符合要求的尾数。
参考代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
int t;
cin>>t;
while(t--){
int flag=0;
int x=0,y=0;
ll a;
cin>>a;
ll c=a;
while(c){
int b=c%10;
if(flag==1&&(b==5||b==0))
break;
if(flag==0&&b==0){
flag=1;
x--;
}
x++;
c/=10;
}
flag=0;
while(a){
int b=a%10;
if(flag==1&&(b==2||b==7))
break;
if(flag==0&&b==5){
flag=1;
y--;
}
y++;
a/=10;
}
int minn=min(x,y);
cout<<minn<<endl;
}
return 0;
}
C. Save More Mice
题目描述
输入描述
输出描述
输入样例
3
10 6
8 7 5 4 9 4
2 8
1 1 1 1 1 1 1 1
12 11
1 2 3 4 5 6 7 8 9 10 11
输出样例
3
1
4
贪心把所有离洞口最近的老鼠逐个移动即可,其中可以移动的次数为 n - 1 次,累加每只老鼠到洞口的距离,不超过可移动次数时可以进洞的老鼠数量即为答案。
参考代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
int t;
cin>>t;
while(t--){
int n,k;
cin>>n>>k;
int a[k+10];
for(int i=1;i<=k;i++)
cin>>a[i];
sort(a+1,a+k+1);
ll sum=0;
int ans=0;
for(int i=k;i>=1;i--){
sum+=n-a[i];
ans++;
if(sum>n-1){
ans--;
break;
}
}
cout<<ans<<endl;
}
return 0;
}
D1. All are Same
题目描述
输入描述
输出描述
输入样例
3
6
1 5 3 1 1 5
8
-1 0 1 -1 0 1 -1 0
4
100 -1000 -1000 -1000
输出样例
2
1
1100
令所有数相同,即所有数都减到该数组中的最小值即可。k 即为所有差值的最大公因数,注意数组中所有数字相同时的特判。
参考代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b)
{
while(b){
ll t = b;
b = a%b;
a = t;
}
return a;
}
int main(){
int t;
cin>>t;
while(t--){
int n;
cin>>n;
ll cha;
int a[n+10];
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+n+1);
int minn=a[1];
int flag=0;
ll ans;
for(int i=1;i<=n;i++){
if(a[i]==minn)
continue;
if(flag==0){
ans=a[i]-minn;
flag=1;
continue;
}
if(flag==1){
cha=a[i]-minn;
if(cha%ans==0)
continue;
else{
ans=gcd(ans,cha);
}
}
}
if(flag==0)
cout<<"-1"<<endl;
if(flag==1)
cout<<ans<<endl;
}
return 0;
}