Codeforces Round #544 (Div. 3)

A. Middle of the Contest

题意:给两个时刻,求中间时刻。

思路:计算出总的分钟数/2即可,注意输出格式!

代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int a,b,c,d;
    scanf("%d:%d",&a,&b);
    scanf("%d:%d",&c,&d);
    int t1=a*60+b,t2=c*60+d;
    int sum=(t1+t2)/2;
    printf("%02d:%02d\n",sum/60,sum%60);
    return 0;
}

B. Preparation for International Women's Day

题意:有n个数,记作d[i].能够使用组成多少对,使得每一对的和都能整除k。求最后用到的数的个数。

思路:记录%k的数分别有多少个,计算对数即可,注意判断边界。

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+7;
int a[maxn],d[maxn];
int main(){
    int n,k,x;
    cin>>n>>k;
    for(int i=1;i<=n;i++) cin>>x,a[x%k]++;
    int res=a[0]/2;
    for(int i=1;i<k/2;i++){
        int minn=min(a[i],a[k-i]);
        res+=minn;
        a[i]-=minn;
        a[k-i]-=minn;
    }
    if(k%2==0) res+=a[k/2]/2;
    else res+=min(a[k/2],a[k-k/2]);
    cout<<res*2<<endl;
    return 0;
}

C. Balanced Team

题意:给n个数,可以从中选1~n个数,但是极差不能超过5,问最多可以选几个数。

思路:排序后 对于每一个数二分查找符合条件的,最后取max即可。

代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;cin>>n;
    vector<int>v;
    for(int i=1;i<=n;i++){
        int x;cin>>x;
        v.push_back(x);
    }
    sort(v.begin(),v.end());
    int res=0;
    for(int i=0;i<n;i++){
        int w=upper_bound(v.begin(),v.end(),v[i]+5)-v.begin();
        res=max(res,w-i);
    }
    cout<<res<<endl;
    return 0;
}

D. Zero Quantity Maximization

题意:给两个数组a,b,构造一个数组c,使得c[i]=a[i]*d+b[i]

找到一个d使得c数组有最多0,求出0的最多个数。

思路:

就是求斜率相同的最大个数,用map统计一下b/a的个数取max即可。

细节挺多的:1.要用long double 2.特判一下a==0或b==0的情况,如果a==0&&b==0直接加到结果里就好。

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+100;
int a[maxn];
long double b[maxn];
map<long double,int>mp;

int main(){
    int n;cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=n;i++) cin>>b[i];
    int res=0,tmp=0;
    for(int i=1;i<=n;i++){
        if(a[i]==0){
            if(b[i]==0){
                tmp++;
            }
            continue;
        }
        long double x=b[i]/a[i];
        mp[x]++;
        res=max(res,mp[x]);
    }
    res+=tmp;
    cout<<res<<endl;
    return 0;
}