cf #748 (Div. 3) A/B/C/D

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;
}

猜你喜欢

转载自blog.csdn.net/laysan/article/details/120797097