Codeforces-Round#561 Div.2

A题

基本思路:

假设n个学生开始字母相同,则分成n/2和n-n/2两对的配对数最少

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;cin>>n;int a[26]={0};
    for(int i=0;i<n;i++)
    {
        string s;cin>>s;
        a[s[0]-'a']++;
    }
    int sum=0;
    for(int i=0;i<26;i++)
    {
        int s1=a[i]/2,s2=a[i]-s1;
        sum+=s1*(s1-1)/2+s2*(s2-1)/2;
    }
    cout<<sum<<endl;
    return 0;
}

C题

基本思路:

取绝对值排序,然后取i~i*2的配对数,用二分查找

#include<bits/stdc++.h>
using namespace std;
int arr[200010];
int cmp(int a,int b)
{
    return a<b;
}
int main()
{
    int n;cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>arr[i];
        if(arr[i]<0)arr[i]*=-1;
    }
    sort(arr,arr+n,cmp);
    int cnt=0;
    for(int i=0;i<n-1;i++)
    {
        int num=upper_bound(arr,arr+n,arr[i]*2)-arr;
        cnt+=num-i-1;
    }
    cout<<cnt<<endl;
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/tldr/p/10887951.html