A - Elections
题意:
给候选人投票,n组样例,每组有3个候选人,要使得对应的候选人超过其他人的票数,最少还需要多少票。
题解:
对于当前的人,求出剩下的两个人中的较大的,然后直接求差+1就可。
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int a,b,c;
cin>>a>>b>>c;
int mx=max(a,b);
mx=max(mx,c);
if(mx>b && mx>c)
cout<<mx-a<<' ';
else
cout<<mx+1-a<<' ';
if(mx>a && mx>c)
cout<<mx-b<<' ';
else
cout<<mx+1-b<<' ';
if(mx>a && mx>b)
cout<<mx-c<<endl;
else
cout<<mx+1-c<<endl;
}
}
B - Make it Divisible by 25
题意:
给一个数字n(25<=n<=1e18),问最少删掉几个数字就能够使数字被25整除。
题解:
能被数字整除的数的末两位只有四种情况"00",“25”,“50”,“75”,我们对于每种情况计算出要删掉的数字,然后取最小值就行了。
#include <bits/stdc++.h>
#define ll long long
using namespace std;
char num[20];
int cal(char c1, char c2)
{
int len = strlen(num);
int ans = -1;
for (int i = len - 1; i >= 0; i--)
{
if (num[i] == c2 && ans == -1)
{
ans = i;
continue;
}
if (num[i] == c1 && ans != -1)
{
return len - i - 2;
}
}
return 100;
}
int main()
{
int t;
cin >> t;
while (t--)
{
cin >> num;
int ans = 100;
ans = min(ans, cal('0', '0'));
ans = min(ans, cal('5', '0'));
ans = min(ans, cal('2', '5'));
ans = min(ans, cal('7', '5'));
cout << ans << endl;
}
return 0;
}
C - Save More Mice
题意:
猫追老鼠的游戏,猫的初始位置是0,有n只老鼠,老鼠洞在k位置,一个位置可以有多个老鼠,每一次只能有一只老鼠向右走一步,然后猫向右走一步,问当猫走到老鼠洞的时候最多能有多少只老鼠不被吃掉。
题解:
首先看看猫到老鼠洞的左侧(k-1)的位置需要走多少步,然后看在这些步数内有多少只老鼠能走到老鼠洞,每一只老鼠到老鼠洞需要的步数为(k-i)i老鼠一开始的位置。
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+7;
int a[N];
int main()
{
int t;
cin>>t;
while(t--)
{
int n,k;
cin>>n>>k;
for(int i=1; i<=k; i++)
{
cin>>a[i];
}
sort(a+1,a+k+1);
int ans=0,cat=0;
for(int i=k; i>=1; --i)
{
if(cat>=a[i]) break;
++ans;
cat+=n-a[i];
}
cout<<ans<<endl;
}
return 0;
}
D - All are Same
题意:
给一个数组,每次操作可以将ai减去k值,k值是固定的,k值最大为多少,如果没有结果就输出-1。
题解:
就是找所有数与最小值的差值的最大公约数,如果所有的数是一样的,那就是输出-1。
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1e5+1;
int n;
int a[N];
bool check(int num)
{
for(int i=2;i<=n;i++)
{
if((a[i]%num+num)%num!=(a[i-1]%num+num)%num)
return false;
}
return true;
}
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+n+1);
int big=a[n]-a[1];
int ans=-1;
for(int i=1;i*i<=big;i++)
if(big%i==0)
{
if(i>ans && check(i))
ans=i;
if(big/i>ans && check(big/i))
ans=big/i;
}
cout<<ans<<endl;
}
}